JavaScript判断对象是否为空对象
这个问题的本质是遍历时候考虑对象的不可枚举性。
1.JSON.stringify
function isEmpty1(obj){
return JSON.stringify(obj)==='{}'
}
let obj1={
b:undefined,
c:function (){},
}
console.log(isEmpty1(obj1))//true
JSON不能序列化函数、undefined、循环引用等。
2.Object.keys(obj)
function isEmpty2(obj){
return Object.keys(obj).length===0;
}
let key2=Symbol(1)
let obj2={
[key2]:1
}
console.log(isEmpty2(obj2))//true
keys不能遍历不可枚举属性(如Symbol属性)。
3.Object.getOwnPropertyNames(obj)
function isEmpty3(obj){
return Object.getOwnPropertyNames(obj).length===0;
}
let key3=Symbol(1)
let obj3={
[key3]:1
}
console.log(isEmpty3(obj3))//true
可以看到getOwnPropertyNames虽然可以遍历不可枚举属性,但不能遍历Symbol属性。
4.for…in…
function isEmpty4(obj){
let flag=true;
for (let key in obj){
if (key){
flag=false
break;
}
}
return flag
}
let key4=Symbol(1)
let obj4={
[key4]:1
}
console.log(isEmpty4(obj4))//true
可以看到for..in不能遍历不可枚举属性
5.Reflect.ownKeys(obj)
function isEmpty5(obj){
return Reflect.ownKeys(obj).length===0;
}
let key5=Symbol(1)
let obj5={
[key5]:1
}
console.log(isEmpty5(obj5))//false
这是比较好的方法!!!


被折叠的 条评论
为什么被折叠?



