Skip to content

判断对象是否为空 ​

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)

在控制条执行以下,发现明明对象中有一个键值对,但是打印出来的结果却是空对象,那么以上的这几种方法都会有漏洞。Object.keys 对不可枚举的属性无效,JSON.stringify 无法转化函数键值对,同时对不可枚举的属性束手无策

Reflect.ownKeys ​

ES6 的 Reflect.ownKeys 既可以解决非枚举属性也可以解决 Symbol 属性

所以我们可以封装一下成这样

ts
function isEmptyObj(obj) {
  return String(obj) === '[object Object]' && Reflect.ownKeys(obj).length === 0
}

Released under the MIT License.