如何检查一个对象是否为空
程序员文章站
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如何检查一个对象是否为空详解整合,希望对大家有所帮助