当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 如何检查一个对象是否为空

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

检查一个数组为空很容易,直接调用 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如何检查一个对象是否为空详解整合,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网