判断对象是否为空的多种方式

判断对象是否为空

网上也有许多方法,这里来整理一下

一、Object.keys(obj)


ES6 写法:

const data = {};
const arr = Object.keys(data);
console.log(arr.length); // 0

二、JSON.stringify()


const obj = {};
const arr = JSON.stringify(obj);
console.log(arr == "{}"); // true

三、For in 循环


const obj = {};
const arr = function () {for (let key in obj) {return false;}return true;
};
console.log(arr()); // true为空

四、Object.getOwnPropertyNames()


这个方法返回一个包含所有自有属性的数组,不包括原型链上的属性,适用于检查对象的所有属性,包括不可枚举的。

const obj = {};
const arr = Object.getOwnPropertyNames(obj).length === 0;
console.log(arr); // true

五、Reflect.ownKeys()


Reflect.ownKeys()提供了最全面的属性列表,包括符号属性和不可枚举的属性,但不包括原型链上的属性。较新的方法,可能不兼容老旧浏览器。适用于需要全面检查对象所有属性的场景。

const obj = {};
const arr = Reflect.ownKeys(obj).length === 0;
console.log(arr); // true

六、Object.entries()


Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。

const obj = {};
const arr = Object.entries(obj).length === 0;
console.log(arr); // true

时间对比


const obj = {};
for (let i = 0; i < 1000; i++) {obj[i] = i;
}const isEmptyWithKeys = (obj) => {return Object.keys(obj).length === 0;
};const isEmptyWithJSONStringify = (obj) => {return JSON.stringify(obj) === "{}";
};const isEmptyWithForIn = (obj) => {for (let key in obj) {if (obj.hasOwnProperty(key)) {return false;}}return true;
};const isEmptyWithGetOwnPropertyNames = (obj) => {return Object.getOwnPropertyNames(obj).length === 0;
};const isEmptyWithReflectOwnKeys = (obj) => {return Reflect.ownKeys(obj).length === 0;
};const isEmptyWithEntries = (obj) => {return Object.entries(obj).length === 0;
};console.time("Object.keys");
isEmptyWithKeys(obj);
console.timeEnd("Object.keys");console.time("JSON.stringify");isEmptyWithJSONStringify(obj);
console.timeEnd("JSON.stringify");console.time("for...in");
isEmptyWithForIn(obj);
console.timeEnd("for...in");console.time("Object.getOwnPropertyNames");
isEmptyWithGetOwnPropertyNames(obj);
console.timeEnd("Object.getOwnPropertyNames");console.time("Reflect.ownKeys");
isEmptyWithReflectOwnKeys(obj);
console.timeEnd("Reflect.ownKeys");console.time("Object.entries");
isEmptyWithEntries(obj);
console.timeEnd("Object.entries");

请添加图片描述

总结


本文介绍了 6 种判断对象是否为空的方法,并对比了它们的性能。其中,Object.keys() 是最快的方法,适合在性能要求较高的场景中使用。而 JSON.stringify() 性能较差,不建议用于大对象的判空操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.整合第三方技术【整合JUnit】

目录 1.创建项目&#xff1a; 2.导入测试对应的starter 3.添加测试对象 3.1 添加Prodcut接口文件 3.2 添加ProdcutImpl文件 3.3 测试类添加测试文件&#xff0c;并开始测试 4.测试类文件解析 4.1.测试类使用SpringBootTest修饰 4.2使用自动装配的形式添加要测试的对象 1.…

【PromptCC】遥感图像变化字幕的解耦范式

摘要 以往的方法忽略了任务的显著特异性&#xff1a;对于不变和变化的图像对&#xff0c;RSICC难度是不同的&#xff0c;以一种耦合的方式处理未变化和变化的图像对&#xff0c;这通常会导致变化字幕的混淆。论文链接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp…

Trip.com 如何从 Elasticsearch 迁移到 ClickHouse 并构建了 50PB 的日志解决方案

本文字数&#xff1a;8721&#xff1b;估计阅读时间&#xff1a;22 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 在 Trip.com&#xff0c;我们为用户提供广泛的数字产品&#xff0c;包括酒店和机票预订、景点、旅游套餐、商务…

电脑复制按哪个键?还不会操作的赶紧来看!

当我们提到“电脑复制按哪个键”时&#xff0c;实际上是在讨论电脑键盘上用于执行复制操作的快捷键。复制功能在日常的电脑操作中极为常用&#xff0c;无论是文本编辑、文件处理还是图片操作&#xff0c;都离不开复制这一基本功能。以下&#xff0c;我们将深入探讨电脑复制操作…

【环境搭建】windows下MySQL8与5共存

目录 一、安装MySQL81.官网下载2.初始化mysql文件夹中my.ini文件3.初始化data文件夹&#xff0c;并记录初始密码4.安装服务&#xff0c;指定服务名称5.启动服务6.测试登录并修改密码 二、安装MySQL51.mysql5文件夹中初始化my.ini文件2.初始化data文件夹&#xff0c;并记录初始密…

GraphQL:简介

GraphQL 图片来源&#xff1a; 我们将探索GraphQL 的基础知识&#xff0c;并学习如何使用Apollo将其与 React 和 React Native 等前端框架连接起来。这将帮助您了解如何使用 GraphQL、React、React Native 和 Apollo 构建现代、高效的应用程序。 什么是 GraphQL&#xff1f;…

春秋云境:CVE-2022-25411[漏洞复现]

根据题目提示和CNNVD优先寻找后台管理地址 靶机启动后&#xff0c;使用AWVS进行扫描查看网站结构 在这里可以看到后台管理的登录地址&#xff1a;/admin/&#xff0c;根据题目提示可知是弱口令 尝试admin、123456、admin666、admin123、admin888...等等常见弱口令 正确的账户…

地理空间数据格式GeoJSON扫盲,在CesiumJS中如何加载。

Hi&#xff0c;我是贝格前端工场&#xff0c;GIS已经越来越多的应用在可视化大屏中了&#xff0c;开发GIS类应用就少不了地理空间数据&#xff0c;本文介绍一下数据GeoJSON数据格式。 一、什么是GeoJSON数据格式&#xff0c;在GIS开发中有什么作用 GeoJSON是一种基于JSON&…

【MySQL】数据库——备份与恢复,日志管理1

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中&#xff0c;数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因&#xff1a; 程序错误人为,操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 2.数据库备份…

小窗口大魔力,实况窗服务实时掌控重要信息变化

移动互联网时代&#xff0c;各种以用户为中心的App如春笋般涌现&#xff0c;满足了用户在购物、导航、娱乐等不同场景下的需求&#xff0c;不同程度上丰富了用户的日常生活。然而&#xff0c;随着App种类的激增&#xff0c;用户在享受多样化服务的同时&#xff0c;也面临着多任…

26.4 Django 视图层

1. 视图函数 视图函数是Django框架中用于处理Web请求并返回Web响应的重要组件. 以下是对Django视图函数的详细解释: * 1. 视图函数与URL的映射.为了让Django能够知道哪个URL对应哪个视图函数, 需要在应用的urls.py文件中定义URL模式.使用path或re_path函数来定义URL模式, 并将…

Linux安装frp实现内网穿透

Linux运维工具-ywtool 目录 一. 简介二.代理类型三.frp支持的Linux的架构四.安装1.准备工作2.配置frp服务器端(a)下载安装包(b)解压安装包(c)修改配置文件(d)启动服务端 3.配置frp客户端(a)下载安装包并修改配置文件(b)启动客户端 4.测试连接 五.其他1.多端口穿透(a)服务端(b)客…

【AI】存储自定义色板库

点击左上角色板&#xff0c;弹出色板框&#xff1b; 色板框的左下角有一个“色板库” 菜单&#xff0c;点击色板库菜单&#xff0c;弹出色板库&#xff1b; 色板库弹窗的第一条数据【存储色板】&#xff0c;点击存储色板&#xff0c;出现自定义色板所在文件路径&#xff1b; 找…

计算机毕业设计Thinkphp/Laravel校园体育器材管理系统

校园体育器材管理系统在流畅性&#xff0c;续航能力&#xff0c;等方方面面都有着很大的优势。这就意味着校园体育器材管理系统的设计可以比其他系统更为出色的能力&#xff0c;可以更高效的完成最新的体育器材、器材借用、器材归还、器材损坏、采购入库、器材报废、维修记录等…

Spring Boot整合RocketMQ实现延迟消息消费

导包 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.3</version></dependency>添加配置信息 application配置文件 # rocketMq地址 rocketmq.name…

Ubuntu+Apache2 搭建Gerrit 环境

一、前言 时隔多年&#xff0c;好久没有更新CSDN 博客了&#xff0c;主要原因有如下两点&#xff1a; 1、平时工作繁忙&#xff0c;无暇更新。 2、工作内容涉及信息安全&#xff0c;一些工作经验积累不便更新到互联网上。 最近一直在折腾搭建Gerrit 环境&#xff0c;最开始是…

基于Transformer的自监督学习在NLP中的前沿应用

1. 引言 自然语言处理&#xff08;NLP&#xff09;领域正经历一场由自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;和Transformer架构共同驱动的革命。自监督学习通过巧妙地利用未标注数据&#xff0c;大大减少了对人工标注的依赖&#xff0c;而Transforme…

基于IM948(Low-cost IMU+蓝牙)模块的高精度PDR(Pedestrian Dead Reckoning)定位系统 — 可以供模块和配套代码

一、背景与意义 行人PDR定位系统中的PDR&#xff08;Pedestrian Dead Reckoning&#xff0c;即行人航位推算&#xff09;背景意义在于其提供了一种在GPS信号不可用或不可靠的环境下&#xff0c;对行人进行精确定位和导航的解决方案。以下是关于PDR背景意义的详细描述&#xff1…

Shopee、Lazada测评,是找服务商呢?还是建议自己养号补单呢?

目前大部分Shopee、Lazada的卖家由于运营成本的增加&#xff0c;都会找服务商测评来打造权重&#xff0c;但是找服务商有很多不靠谱&#xff0c;建议还是自行精养一批号&#xff0c;账号在手里比较安全可控&#xff0c;随时随地可以送测&#xff0c;精准搜索关键词货比三家下单…

【日记】希望文竹长得越来越好吧(856 字)

正文 为什么昨天给老师提早说了今天上课…… 今天都要忙死了。不论上午下午都手忙脚乱。上午之前的存量客户来开新账户&#xff0c;流程卡在客户经理尽调那里。恰好那个客户经理还是部门主管&#xff0c;我们没一个人敢催。向副行长汇报情况&#xff0c;又跟客户说。客户跟他们…