当前位置: 首页 > news >正文

在js中判断对象是空对象的几种方法

  1. 使用 Object.keys() 方法
    Object.keys() 方法返回对象自身的可枚举属性名称组成的数组。如果数组的长度为 0,那么对象是空的。
function isEmptyObject(obj) {return Object.keys(obj).length === 0 && obj.constructor === Object;
}const obj1 = {};
const obj2 = { a: 1 };console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
  1. 使用 for…in 循环
    for…in 循环用于遍历对象的可枚举属性。如果循环没有执行,说明对象是空的。
function isEmptyObject(obj) {for (let key in obj) {if (obj.hasOwnProperty(key)) {return false;}}return obj.constructor === Object;
}const obj1 = {};
const obj2 = { a: 1 };console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
  1. 使用 JSON.stringify() 方法
    可以将对象转换为 JSON 字符串,然后判断字符串是否等于 ‘{}’。
function isEmptyObject(obj) {return JSON.stringify(obj) === '{}' && obj.constructor === Object;
}const obj1 = {};
const obj2 = { a: 1 };console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
  1. 使用 Object.entries() 方法
    Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组。如果数组长度为0,则对象是空的。
function isEmptyObject(obj) {return Object.entries(obj).length === 0 && obj.constructor === Object;
}const obj1 = {};
const obj2 = { a: 1 };console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
  1. 验证对象的构造函数
    在判断对象是否为空时,可以附加检查对象的构造函数是否为 Object。这可以避免在对象可能是由其他构造函数创建的情况下出现错误判断。
function isEmptyObject(obj) {return obj && obj.constructor === Object && Object.keys(obj).length === 0;
}const obj1 = {};
const obj2 = new Date();console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false (Date is not a plain object)

总结

这些方法可以有效地判断一个对象是否为空对象。你可以根据具体需求选择合适的判断方法。最常用的是 Object.keys(obj).length === 0,因为它简洁且性能较好。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL库表的基本操作
  • uniapp 页面跳转传参:父页面监听子页面传过来的数据
  • linux下串口通信相关知识
  • 避免CSRF攻击的方案
  • 数据炼金术:用Python爬虫精炼信息
  • CSDN AI-WEB-1.0 攻略
  • C++基础语法:析构函数
  • 【现代操作系统】1. intro
  • Java中的主要设计模式
  • ubuntu18.04下安装nvidia3090显卡驱动
  • 数据结构----栈
  • C语言指针详解-上
  • (七)Activiti-modeler中文支持
  • 『Z-Workshop』 The Graph workshop mini hackathon活动
  • IBERT 眼图机制
  • @jsonView过滤属性
  • 【EOS】Cleos基础
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 0x05 Python数据分析,Anaconda八斩刀
  • 10个最佳ES6特性 ES7与ES8的特性
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android 控件背景颜色处理
  • CSS 提示工具(Tooltip)
  • Elasticsearch 参考指南(升级前重新索引)
  • express + mock 让前后台并行开发
  • Java 多线程编程之:notify 和 wait 用法
  • node 版本过低
  • node和express搭建代理服务器(源码)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python进阶细节
  • SQL 难点解决:记录的引用
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue中实现单选
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 搭建gitbook 和 访问权限认证
  • 多线程 start 和 run 方法到底有什么区别?
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 工作手记之html2canvas使用概述
  • 力扣(LeetCode)21
  • 设计模式走一遍---观察者模式
  • 我感觉这是史上最牛的防sql注入方法类
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • (007)XHTML文档之标题——h1~h6
  • (1)虚拟机的安装与使用,linux系统安装
  • (13)DroneCAN 适配器节点(一)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (Java数据结构)ArrayList
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (十八)三元表达式和列表解析
  • (学习总结16)C++模版2
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建