如何判断对象为空
1. 使用Object.keys()方法
function isEmpty(obj){
return Object.keys(obj).length === 0
}
Object.keys是相对快速的方法,因为它直接返回一个包含所有自由属性的数组,且不包含原型链上的属性,适用于大部分常见对象的快速凭判空判断
2. JSON.stringify
function isEmpty(obj){
return JSON.stringify(obj) === '{}'
}
JSON.stringify将对象转化为字符串,它可能比其他方法慢一些,并且不适用于包含不可序列化属性的对象,适用于简单对象的判空,不推荐在性能要求高的场景中使用
3. 使用for...in循环
function isEmpty(obj){
for(let key in obj){
if(obj.hasOwnProperty(key)){
return false
}
}
return true
}
for...in遍历循环对象的所有属性,包括原型链上的可枚举属性,需要在循环中加入hasOwnproperty检查以避免误判,虽然性能不一定总是最差,但在某些情况下,它的性能优于其他方法
4. Object.getOwnPropertyNames
function isEmpty(obj){
return Object.getOwnPropertyNames(obj).length === 0
}
这个方法返回一个包含所有自由属性的数组,不包括原型链上的属性,适用于检查对象的所有属性,包括不可枚举的
5. Reflect.ownKeys
function isEmpty(obj){
return Reflect.ownKeys(obj).length === 0
}