实现 isObjectEmpty 方法,判断一个对象是否为空
要求:如果其原型链上有自定义数据或者方法,认为是非空对象。
为了实现 isObjectEmpty,我们需要同时判断:
- 对象自身是否有可枚举属性(通过
Object.keys()) - 原型链上是否有非原生、自定义的属性或方法
示例代码:
js
function isObjectEmpty(obj) {
if (typeof obj !== 'object' || obj === null) return false;
// 检查自身属性
if (Object.keys(obj).length > 0) return false;
// 检查原型链上的自定义属性(跳过 Object.prototype 的原生方法)
let proto = Object.getPrototypeOf(obj);
while (proto && proto !== Object.prototype) {
if (Object.getOwnPropertyNames(proto).some(key => key !== 'constructor')) {
return false;
}
proto = Object.getPrototypeOf(proto);
}
return true;
}题目要点:
- 自身属性非空 → 返回
false - 原型链上存在非
Object.prototype的自定义成员 → 返回false - 否则为“空对象” → 返回
true