js判断空对象

1. 使用 Object.keys() 方法

Object.keys(obj) 方法返回一个包含对象可枚举属性名称的数组。如果返回的数组长度为 0,表示对象为空。

javascript 复制代码
const isEmpty = (obj) => Object.keys(obj).length === 0;

// 示例
const emptyObject = {};
const nonEmptyObject = { key: 'value' };

console.log(isEmpty(emptyObject)); // true
console.log(isEmpty(nonEmptyObject)); // false

2. 使用 Object.entries() 方法

Object.entries(obj) 返回一个包含对象自身可枚举属性 key, value 对的数组。如果该数组长度为 0,则对象为空。

javascript 复制代码
const isEmpty = (obj) => Object.entries(obj).length === 0;

// 示例
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false

3. 使用 JSON.stringify() 方法

通过将对象序列化为 JSON 字符串,判断其是否为 {}

javascript 复制代码
const isEmpty = (obj) => JSON.stringify(obj) === '{}';

// 示例
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false

4. 使用 for...in 循环结合hasOwnProperty函数

使用 for...in 循环遍历对象,如果能够找到一个可枚举的属性,则对象不为空。注意:这会遍历对象的原型链上的可枚举属性。

javascript 复制代码
const isEmpty = (obj) => {
  for (let key in obj) {
    // 如果有可枚举属性,返回 false
    if (obj.hasOwnProperty(key)) {
      return false; // 非空对象
    }
  }
  return true; // 空对象
};

// 示例
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false

5. 结合 Object.getOwnPropertyNames()Object.getOwnPropertySymbols()

可以使用 Object.getOwnPropertyNames(obj)Object.getOwnPropertySymbols(obj) 方法(分别返回对象的可枚举和不可枚举属性,及符号属性)来判断。

javascript 复制代码
const isEmpty = (obj) => 
  Object.getOwnPropertyNames(obj).length === 0 && 
  Object.getOwnPropertySymbols(obj).length === 0;

// 示例
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false

总结

  • 最常用且推荐的方法是使用 Object.keys(),因为它简洁且句意明确。
  • Object.entries()JSON.stringify() 也很常见,适用于不同场景。
  • for...in 循环适合需要检查可枚举属性的情况。
  • 使用原生的 Object.getOwnPropertyNames()Object.getOwnPropertySymbols() 方法更为全面。
相关推荐
小雨下雨的雨8 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.11 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
CryptoPP12 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫12 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
fangdengfu12312 小时前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
凌云拓界12 小时前
文件管理:让AI安全操作你的电脑 ——CogitoAgent开发实战(三)
javascript·人工智能·架构·开源·node.js
凌云拓界13 小时前
联网能力:让AI看见更广阔的世界 ——CogitoAgent开发实战(四)
javascript·人工智能·架构·node.js·创业创新
阳区欠13 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Jinkxs13 小时前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
JustHappy14 小时前
古法编程秘籍(六):程序到底是怎么跑起来的?从 IO 到中断,一次讲明白
前端·后端·全栈