Object.keys()
Object.keys()
方法返回一个对象自身可枚举属性的数组。如果数组长度为 0,则表示对象没有任何属性,是空对象。
示例:
function isEmptyObject(obj) {
return Object.keys(obj).length === 0;
}
const obj1 = {};
const obj2 = { a: 1 };
console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
for...in
循环for...in
循环可以遍历对象的所有可枚举属性。如果在循环中没有进入循环体,则表示对象没有属性,是空对象。
示例:
function isEmptyObject(obj) {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
return false; // 对象有属性
}
}
return true; // 对象没有属性
}
const obj1 = {};
const obj2 = { a: 1 };
console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
JSON.stringify()
JSON.stringify()
方法可以将对象转换为 JSON 字符串。对于空对象,转换后的结果将是 "{}"
。
示例:
function isEmptyObject(obj) {
return JSON.stringify(obj) === '{}';
}
const obj1 = {};
const obj2 = { a: 1 };
console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
Object.getOwnPropertyNames()
或 Object.getOwnPropertySymbols()
Object.getOwnPropertyNames()
返回对象自身的所有属性(包括不可枚举属性)名称的数组,Object.getOwnPropertySymbols()
返回对象自身的所有符号属性的数组。检查这些数组的长度是否为 0,也可以判断对象是否为空。
示例:
function isEmptyObject(obj) {
return Object.getOwnPropertyNames(obj).length === 0 && Object.getOwnPropertySymbols(obj).length === 0;
}
const obj1 = {};
const obj2 = { a: 1 };
console.log(isEmptyObject(obj1)); // true
console.log(isEmptyObject(obj2)); // false
这些方法各有优劣,使用 Object.keys()
和 for...in
循环是最常见和推荐的方法,因为它们性能较好且简单直观。JSON.stringify()
方法虽然可以使用,但可能在性能上不如其他方法高效。根据实际情况选择合适的方法来判断一个对象是否为空。