判断对象是否为空
2023-06-06 07:44:05
目前常见的一些回答一般为一下几种方法
JSON.stringify
通过 JSON.stringify 方法将对象转成字符串来判断
Object.keys
Object.keys()是 ES6 中的方法,可以返回一个由给定对象的自身可枚举属性组成的数组。如果对象为空,则返回一个空数组
for...in 遍历
for...in 语句以任意顺序迭代一个对象的除 Symbol 以外的可枚举属性,包括继承的可枚举属性
通常的方法为以上几种,但是会有一些问题,比如我们检测下面这个对象
ts
const obj = {
[Symbol()]: 1
}
JSON.stringify(obj)
1
2
3
4
5
2
3
4
5
在控制条执行以下,发现明明对象中有一个键值对,但是打印出来的结果却是空对象,那么以上的这几种方法都会有漏洞。Object.keys 对不可枚举的属性无效,JSON.stringify 无法转化函数键值对,同时对不可枚举的属性束手无策
Reflect.ownKeys
ES6 的 Reflect.ownKeys 既可以解决非枚举属性也可以解决 Symbol 属性
所以我们可以封装一下成这样
ts
function isEmptyObj(obj) {
return String(obj) === '[object Object]' && Reflect.ownKeys(obj).length === 0
}
1
2
3
2
3