如何判断一个空对象?
方法一
将对象序列化,判断序列化后的字符串。
const obj = {}
let stringfiedObj = JSON.stringify(obj)
console.log(stringfiedObj === '{}') // true
方法二
使用 for...in。
注:for...in 也会输出原型链上继承的可枚举属性,所以需要额外判断是否是原型链的属性。
function objectIsEmpty(obj) {
for (let value in obj) {
if (obj.hasOwnProperty(value)) {
return false
}
}
return true
}
// 创建一个对象,在对象的原型上挂载一个 sex 属性
class Person {
}
Person.prototype.sex = 'unknow'
let p1 = new Person()
console.log(objectIsEmpty(p1)); // 输出仍为 true
附上 MDN 中对 for...in 的介绍:
方法三
使用 Object.keys()。
注:Object.keys() 返回对象自身的可枚举属性组成的数组(不包括不可枚举属性)
function objectIsEmpty(obj) {
let keys = Object.keys(obj)
if (keys.length === 0) {
return true
} else {
return false
}
}
objectIsEmpty({}) // true
objectIsEmpty({ name: 'xiaowang' }) // false
方法四
如果想同时将不可枚举属性也纳入判断范围,可以使用 Object.getOwnPropertyNames。
function objectIsEmpty(obj) {
let keys = Object.getOwnPropertyNames(obj)
if (keys.length === 0) {
return true
} else {
return false
}
}
objectIsEmpty({}) // true
objectIsEmpty({ name: 'xiaowang' }) // false
如果还有其他方法,欢迎小伙伴们提出,共同学习。