如何判断一个对象为空对象
Jade 5/15/2021 JavaScript
# 方法
# 1.JSON.stringify
const obj = {}
JSON.stringify(obj) === '{}' // true
1
2
3
2
3
# 2.for in
function isEmptyObj(obj) {
for(let key in obj) {
return false
}
return true
}
isEmptyObj(obj) // true
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
弊端
由于 for in
会遍历对象的原型链,如果原型链上某个原型对象中有属性或方法时,都会被遍历出来,解决方法可以看下一种方法,一般我们不会使用 for in
来判断一个对象是否是空对象
# 3.for in 和 hasOwnProperty
function isEmptyObj(obj) {
for(let key in obj) {
if (obj.hasOwnProperty(key)) {
return false
}
}
return true
}
isEmptyObj(obj) // true
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 4.Object.getOwnPropertyNames
Object.getOwnPropertyNames(obj).length === 0 // true
1
弊端
getOwnPropertyNames 无法遍历对象中 Symbol 定义的属性,相关知识可查看 这篇文章
# 5.Object.values
Object.values(obj).length === 0 // true
1
# 6.Object.keys
Object.keys(obj).length === 0 // true
1
# 7.Object.entries
Object.entries(obj).length === 0 // true
1
# 总结
推荐使用 Object.values
、 Object.keys
、 Object.entries
,他们都是以数组的方式返回,区别是:values 方法返回对象的 属性值;keys 方法返回对象的 属性名;entries 方法返回对象的 属性名 和 属性值
注意:返回的属性是对象 自有的
且 可枚举的
属性