判断方法:
实例:
const obj1 = {}
const obj2 = {
name: '张三'
}
const obj3 = {
[Symbol('value')]: 13
}
//打印结果:
console.log(obj1) // {}
console.log(obj2) // {name: '张三'}
console.log(obj3) // {Symbol(value): 13}
接下来我们先使用上面的三种方法来分别判断 obj1, obj2, obj3是否为空
// Json.stringify()方法
console.log(JSON.stringify(obj1)) // {}
console.log(JSON.stringify(obj2)) // {"name":"张三"}
console.log(JSON.stringify(obj3)) // {}
// Object.keys()方法
Object.keys(obj1) // []
Object.keys(obj2) // ['name']
Object.keys(obj3) // []
// for in 循环判断方法(此方法返回为true,说明对象不为空)
function emptyObj(obj){
for (let i in obj) {
return true
}
return false
}
console.log(emptyObj(obj1)) // false
console.log(emptyObj(obj2)) // true
console.log(emptyObj(obj3)) // false
好啦,让我们看看判断出来的结果,大家有没有发现,我在obj3里面添加了一个Symbol类型作为obj3的属性,可是为什么前面三种方法都没有检测出来呢?这是这个属性是不可枚举的,而前面三种方法只会返回对象的可枚举属性,所以最安全的判断对象是否为空的解决方案是第四种,让我们看看代码:
// 使用 Reflect.ownKeys() 方法
console.log(Reflect.ownKeys(obj1)) // []
console.log(Reflect.ownKeys(obj2)) // ['name']
console.log(Reflect.ownKeys(obj3)) // [Symbol(value)]
ok,到这里就结束了,建议我们日常工作中,使用第四种方法来进行判断操作,这样的话可以规避掉一些未知的错误