JS中判断对象是否为真·空

一、前言

js中判断对象是否为空有多种方法,比如转为string比较是否 === ‘{}’等,那么哪一种是最为正确的呢?

1
2
3
4
5
6
7
8
9
10
11
// 一种特殊键值 Symbol 作为key
const name = Symbol('name');
const obj = {
[name]: 'rexhang'
};
console.log(obj); // { Symbol(name): 'rexhang' }
console.log(JSON.stringify(obj) === '{}'); // true, 期望得到false 因为对象内是有内容的,因此 此方法不准确
console.log(Object.keys(obj).length === 0); // true, 拿不到Symbol keys 判断不准确
// 推荐使用
const isEmptyObject = globalThis.Reflect ? !Reflect.ownKeys(obj).length : !(Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj))).length;
console.log(isEmptyObject); // false 由此可以得出 此对象(obj) 并非空对象

使用上述方法可以比较完美的解决 判断js对象是否为空的问题,说不定可以解决你一个生产环境的P0级别的BUG哟~ ❤