判断对象为空,就使用
for in
或者Object.keys
来判断,尽量不要使用JSON.stringify
。
1.for in
首先可以用遍历解决,用的是 for in,思路如下:
- 遍历这个对象
- 如果能被遍历,说明这个对象有属性,返回
false
- 否则说明对象为空,返回
true
- 如果能被遍历,说明这个对象有属性,返回
2.Object.keys()
还有一种方式就是使用 Object.keys(),先把对象转化为数组,然后再根据数组的长度是否为零来判断对象是否为空。
但是传入 null
或 undefined
,就会出问题,如下代码所示:
function isEmptyObject(obj) {
return Object.keys(obj).length === 0;
}
isEmptyObject(null); // Uncaught TypeError: Cannot convert undefined or null to object
isEmptyObject(undefined); // Uncaught TypeError: Cannot convert undefined or null to object
所以在实际项目中,可以用如下方式实现本函数:
function isEmptyObject(obj) {
return Object.keys(obj || []).length === 0;
}
3.JSON.stringify()
还可以使用 JSON.stringify() 来解决本题,只需要判断对象转为 JSON
字符串之后,是不是等于 {}
即可,代码如下:
function isEmptyObject(obj) {
return JSON.stringify(obj) === "{}";
}
判断数组为空,一般判断长度为 0,也可以用和判断对象为空一样的方法来判断。
判断原始类型为空,就使用
!
运算符来判断。