欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何检查一个对象是否为空

程序员文章站 2022-04-12 10:50:08
检查一个数组为空很容易,直接调用 length 方法即可,那么如何检查一个对象是否为空呢 ❓ 这里的空指的是对象没有自有属性 假设这里有两个对象,一个是...

检查一个数组为空很容易,直接调用 length 方法即可,那么如何检查一个对象是否为空呢 ❓

这里的空指的是对象没有自有属性

假设这里有两个对象,一个是 obj 一个是 anotherobj

let obj1 = {
  name: 'oli',
  child: {
    name: 'oliver'
  }
}

let obj2 = {
  [symbol('name')]: 'alice'
}

let obj3 = object.defineproperty({}, 'name', {
  value: 'alice',
  enumerable: false
})

let obj4 = object.create(null)

// 我们需要一个函数,判断是否不含自有属性

isempty(obj1) // false
isempty(obj2) // false
isempty(obj3) // false
isempty(obj4) // true

想了半天查看对象是否有 symbol 属性只能使用 getownpropertysymbols 方法,如果还有更好的方法欢迎留言

方法一:遍历

for-in 遍历,并通过 hasownproperty 方法确认是否存在某个 key 这种方法不能够遍历到 enumerable 为 false 的属性

const isemptyobj = object => {
  if (!!object.getownpropertysymbols(object).length) {
    return false
  }
  for (const key in object) {
    if (object.hasownproperty(key)) {
      return false
    }
  }
  return true
}

方法二:keys 方法

使用 object 静态方法 keys 然后判断 length 即可,keys 返回的是自身可枚举属性,因此同样的不可遍历到 enumerable 为 false 的属性

const isemptyobj = object => {
  if (!!object.getownpropertysymbols(object).length) {
    return false
  }
  if (object.keys(object).length) {
    return false
  }
  return true
}

方法三:json 方法

使用 json stringify 方法将对象转为字符串,与字符串 '{}' 对比,同样该方法无法获取到不可遍历属性

const isemptyobj = object => {
  if (!!object.getownpropertysymbols(object).length) {
    return false
  }
  return json.stringify(object) === '{}'
}

。

方法四:getownpropertynames 方法

使用 object 的 getownpropertynames 方法,获取所有属性名,这样就算是不可枚举属性依然能够获取到,算是比较 ok 的方法。

const isemptyobj = object => {
  if (!!object.getownpropertysymbols(object).length) {
    return false
  }
  if (!!object.getownpropertynames(object).length) {
    return false
  }
  return true
}

如何检查一个对象是否为空

简化版:

const isemptyobj = object => !object.getownpropertysymbols(object).length && !object.getownpropertynames(object).length

以上所述是小编给大家介绍的js如何检查一个对象是否为空详解整合,希望对大家有所帮助