公司网站建设 目录广州冼村人很有钱吗
在 JavaScript 中,判断一个对象是否为空对象(即没有自身可枚举属性),可以通过以下方法实现:
方法 1:使用 Object.keys()
javascript
function isEmptyObject(obj) {// 确保是普通对象(排除 null、数组和其他对象类型)return Object.prototype.toString.call(obj) === '[object Object]' && Object.keys(obj).length === 0;
}
方法 2:使用 for...in 循环
javascript
function isEmptyObject(obj) {if (Object.prototype.toString.call(obj) !== '[object Object]') {return false;}for (let key in obj) {if (obj.hasOwnProperty(key)) {return false;}}return true;
}
方法 3:使用 JSON.stringify()
javascript
function isEmptyObject(obj) {try {return Object.prototype.toString.call(obj) === '[object Object]' && JSON.stringify(obj) === '{}';} catch (e) {return false; // 处理循环引用异常}
}
说明:
-
类型检查
使用Object.prototype.toString.call(obj) === '[object Object]'确保目标是一个普通对象(如{}或new Object()),排除数组、null、日期等特殊对象类型。 -
检查属性
-
Object.keys(obj).length === 0:仅检查对象自身的可枚举属性。 -
for...in+hasOwnProperty:遍历对象自身属性,避免原型链干扰。 -
JSON.stringify():将对象转换为字符串判断,但无法处理不可枚举属性和循环引用。
-
-
边界情况
-
若对象只有 Symbol 属性或不可枚举属性,上述方法可能返回
true(需用Reflect.ownKeys()检测所有属性)。 -
非对象类型(如
null、数字)直接返回false。
-
使用示例:
javascript
isEmptyObject({}); // true
isEmptyObject({ a: 1 }); // false
isEmptyObject([]); // false
isEmptyObject(null); // false
isEmptyObject(Object.create(null)); // true
isEmptyObject(new Date()); // false
根据实际需求选择合适的方法,通常推荐 方法 1 或 方法 2。
