如何判断对象为空

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
}