object.keys(obj).length === 0 可判断对象是否为空,该方法返回对象自身可枚举字符串键数组长度,需先校验 obj 非 null 且为 object 类型,不检测不可枚举属性和 symbol 键。

直接用 Object.keys(obj).length 获取属性数量,再判断是否为 0 即可知道对象是否为空。
用 Object.keys() 获取可枚举属性数组
Object.keys() 返回一个包含对象自身所有可枚举属性(字符串键)的数组。它不包括原型链上的属性,也不包括 Symbol 类型的键或不可枚举属性(如通过 Object.defineProperty 设置的 enumerable: false 的属性)。
- 适用于普通对象、字面量对象、通过
Object.create(null)创建的无原型对象 - 对
null或undefined调用会报错,使用前建议先做类型检查 - 示例:
Object.keys({ a: 1, b: 2 })返回["a", "b"]
统计属性总数并判断是否为空
只需取 Object.keys(obj).length 的值:
- 结果为
0→ 对象不含自身可枚举属性,可视为“空对象”(常见业务场景下的判断标准) - 结果大于
0→ 至少有一个可枚举属性 - 注意:该方法无法检测不可枚举属性或 Symbol 键,如需全面判断,需结合
Object.getOwnPropertyNames()和Object.getOwnPropertySymbols()
安全健壮的空对象判断函数
推荐封装一个带类型校验的工具函数:
function isEmptyObject(obj) {
return obj !== null
&& typeof obj === 'object'
&& Object.keys(obj).length === 0;
}
- 排除
null、undefined、非对象类型(如数组、字符串、数字),避免运行时报错 - 对数组返回
false(即使空数组也属于数组类型,不是对象) - 对
{}、Object.create({})(有原型)、Object.create(null)(无原型)均返回true
对比其他判断方式
不用 JSON.stringify(obj) === "{}" —— 效率低且会忽略不可枚举属性;也不推荐 for...in 循环(需手动过滤原型属性,易出错)。Object.keys() 简洁、语义清晰、性能好,是现代 JS 中最常用的方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











