1. 使用 Object.keys()
方法
Object.keys(obj)
方法返回一个包含对象可枚举属性名称的数组。如果返回的数组长度为 0,表示对象为空。
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,则对象为空。
const isEmpty = (obj) => Object.entries(obj).length === 0;
// 示例
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
3. 使用 JSON.stringify()
方法
通过将对象序列化为 JSON 字符串,判断其是否为 {}
。
const isEmpty = (obj) => JSON.stringify(obj) === '{}';
// 示例
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
4. 使用 for...in
循环结合hasOwnProperty函数
使用 for...in
循环遍历对象,如果能够找到一个可枚举的属性,则对象不为空。注意:这会遍历对象的原型链上的可枚举属性。
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)
方法(分别返回对象的可枚举和不可枚举属性,及符号属性)来判断。
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()
方法更为全面。