平时我们常用一下4种方式判断
// 1. JSON.stringify
const isObjEmpty = (obj) => {
return JSON.stringify(obj) === '{}';
}
// 2. Object.keys
const isObjEmpty = (obj) => {
return Object.keys(obj).length === 0;
}
// 3. Object.getOwnPropertyNames
const isObjEmpty = (obj) => {
return Object.getOwnPropertyNames(obj).length === 0;
}
// 4. 循环
const isObjEmpty = (obj) => {
let flag = true;
for (const key in obj) {
if (key) {
flag = false;
break;
}
}
return flag;
}
此时我们定义一个const obj = {} ,返回结果都是正确的,都是true;
但是有一种symbol类型是判断不出来的。
比如:
const key = Symbol('a')
const obj = {
[key]: 1;
}
这时候obj不是一个空对象,以上4种的返回结果仍然是true, 这时候判断就不太严谨了;
解决方案:
以下方案会把Symbol的情况会被判断出来
5. Reflect.ownKeys
const isObjEmpty = (obj) => {
return Reflect.ownKeys(obj).length === 0;
}