判断对象是否为空
JavaScript 中判断空对象的几种方法
问题
如何判断一个对象是否为空对象(即 {})?
解答
方法一:Object.keys()
function isEmpty(obj) {
return Object.keys(obj).length === 0;
}
// 测试
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
方法二:JSON.stringify()
function isEmpty(obj) {
return JSON.stringify(obj) === '{}';
}
// 测试
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
方法三:for…in 循环
function isEmpty(obj) {
for (let key in obj) {
// 确保是自身属性,不是原型链上的
if (obj.hasOwnProperty(key)) {
return false;
}
}
return true;
}
// 测试
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
方法四:Object.getOwnPropertyNames()
function isEmpty(obj) {
// 可以获取不可枚举的属性
return Object.getOwnPropertyNames(obj).length === 0;
}
// 测试
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
完整的健壮版本
function isEmpty(obj) {
// 排除 null 和 undefined
if (obj == null) return true;
// 排除非对象类型
if (typeof obj !== 'object') return true;
// 判断是否有自身属性
return Object.keys(obj).length === 0;
}
// 测试
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
console.log(isEmpty(null)); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty([])); // true(数组也是对象)
关键点
Object.keys()是最常用的方法,返回可枚举属性数组JSON.stringify()简单但性能较差,且无法处理循环引用for...in会遍历原型链,需配合hasOwnProperty使用Object.getOwnPropertyNames()可获取不可枚举属性- 实际使用时需考虑
null、undefined等边界情况
目录