如何判断空对象

如何判断一个对象是否为空对象?即是否是{}这样的对象. 在做业务开发过程中,有时候我们会遇到空对象,要进行单独的处理,可能有时候就要进行空对象的判断.

下面总结了几种判断一个对象是否为空对象的方法:

方法 1: ES6 Object.keys判断长度

1
2
3
4
5
6
7
const isObject = (obj) =>
Object.prototype.toString.call(obj) === "[object Object]";
const isEmptyObject = (obj) =>
isObject(obj) ? Object.keys(obj).length === 0 : false;

console.log("result", isEmptyObject({})); // true
console.log("result", isEmptyObject({ a: 1 })); // false

方法 2: for in 循环判断

1
2
3
4
5
6
7
8
9
10
11
const isEmptyObject = (obj) => {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
return false;
}
}
return true;
};

console.log("result", isEmptyObject({}));
console.log("result", isEmptyObject({ a: 1 }));

方法 3: 方法 2 的变种

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Object.defineProperty(Object.prototype, "isEmptyObject", {
writable: false,
enumerable: false,
configurable: false,
value: function () {
for (let key in this) {
if (this.hasOwnProperty(key)) {
return false;
}
}
return true;
},
});
// 注意:字面量对象调用时要将表达式用小括号包起来

console.log("result", {}.isEmptyObject()); // true
console.log("result", { a: 1, b: 2 }.isEmptyObject()); // false

let obj = {};
obj.isEmptyObject(); // true

方法 4: JSON.stringify 转换判断

1
2
3
4
const isEmptyObject = (obj) => JSON.stringify(obj) === "{}";

isEmptyObject({}); // true
isEmptyObject({ a: 1 }); // false