js如何优雅的判断一个对象是空对象
前言
很多时候会遇到空对象{}
的情况,怎么样才能够很好的判断呢
前置条件
现在有三个对象
1 | const obj = {} |
编写方法
现在我们用不同的方法来判断
Function 1
我们可以使用JSON.stringify(obj)
1 | const isEmptyJSON = (prop) => JSON.stringify(prop) === '{}'; |
Function 2
我们可以利用ES6
中的 Object.keys()
1 | const isEmptyObjEs6 = (prop) => Object.keys(prop).length === 0; |
Function 3
我们可以利用for in
来遍历对象
1 | const isEmptyForIn = (prop) => { |
Function 4
我们可以利用Object.getOwnPropertyNames()
1 | const isEmptyGetOwnPropertyNames = (prop) => |
校验
1 | isEmptyJSON(obj); // true |
分析
首先obj
和obj1
各个函数都是准确的判断了
唯一的区别就是obj2
的判断
那么obj1
和obj2
有什么区别呢,我只是将 obj2
的属性变成了不可枚举的因此出现了差异化
所以我们也可以推断出前面三个JSON.stringify
Object.keys()
for in
都只能遍历对象的可枚举的属性
如果不可枚举是无法遍历的,因此对于他们来说,就是个空对象
但是Object.getOwnPropertyNames()
可以便利对象上的不可枚举属性,所以能够准确的判断出该对象并不是空
注意,在obj2
中虽然是不可枚举的,但是依旧是可以访问的
1 | obj2.name; // World |
写在后面
其实大部分时候我们可以通过Object.keys()
来判断是否为空,但是可能有些情况比较特殊,所以多学一点方法还是很OK
的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 朱小帅!
评论