Object.keys来判断对象是否为空

判断对象是否为空的方法中,哪种最常用,适用范围最广
其中,Object.keys(obj),只能返回可枚举的属性组成的数组,是不是存在漏洞,
Object.getOwnPropertyNames可以返回全部,但是我看实际情况中,这个很少使用,为什么

阅读 4.1k
4 个回答

Object.keys 不能用于判断对象是否为空(其实也可以,只是要捕捉异常)

Object.keys 的参数不能是 nullundefined,否则会抛错。如果想解决这个错误,最方便的方法是使用空合并

const keys = Object.keys(obj ?? {});

如果 obj 是空,会得到一个空数组。

如果想要 obj 是空的时候得到 undefined,那怕是要用三目条件表达式了

const keys = (obj ?? null === null) ? undefined : Object.keys(obj)

这里 obj ?? null 只是为了把 undefinednull 都处理成 null,省得写两个判断。


已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

你是如何定义空对象的?这个对象的自有属性值是空吗?

Reflect.ownKeys(obj).length === 0

Object.keys(obj)应该是使用最多的,因为够用了

单独的判断对象是不是空没什么意义,一般都是结合业务需求来看的,业务中的需求就千奇百怪了,是不是要考虑继承属性,是不是只考虑自有属性,是不是要考虑不可枚举属性,对于考虑不可枚举属性来说,那Vue中对数据进行了特殊处理,就没法这么考虑了

你只用知道一些判断的api以及他们的特性就行了

for..in:遍历自身及原型链上的可枚举属性
Object.keys:遍历自身的可枚举属性
Object.getOwnPropertyNames:遍历自身的除Symbol件外的所有属性
Object.getOwnPropertyDescriptors:遍历自身的所有属性
Reflect.ownKeys():遍历自身的所有属性

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

而我选择最暴力的办法:JSON.stringify(...) === '{}'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题