判断对象是否为空

undefined

这是一个工作中经常遇到的问题,之前每次遇到都是查一下百度,然后胡乱copy一段进行判断。成功则过,不成功copy另一段。从来没细心研究过,这次趁着闲暇认真的总结一波给自己留个笔记吧.

要知道如何判断空对象,所以就要知道Boolean()函数对Object类型的转换规则。这你就能搞懂很多问题了。同时为了回顾别的知识点,我干脆就把所有转换规则都写出来吧。
| 数据类型 | 转换为true的值 | 转换为false的值 |
|————-|————-|–|
| Boolean | true | false |
| String | 任何非空字符串 | “”(空字符串) |
| Number | 任何非零数字值(包括无穷大)| 0和NaN |
| Object | 任何对象 | null |
| Undefined | 不适用 | undefined |

通过上面的表,我们就可以很容易地理解到为什么判断空字符串的时候我们可以使用if(str){}而判断对象的时候我们不能使用if(obj)了。

因为空对象也是一个对象,需要单独分配内存,而不是像字符串那样为空时就是大锅饭,大家都相等。所以很容易就能想象到,每个对象就像指针,即使内在属性玩法完全一样,但是它们却完全不相等,只要你将对象的引用进行赋值得到。下面贴出所有的方法,推荐程度降序排列。

for in 循环

1
2
3
4
5
6
7
// 如果对象有属性,那么则能够进入for in 循环
function isEmptyObject(obj){
for(var key in obj){
return false
};
return true
};

利用toString()

将对象转为字符串进行比较。也就是if(JSON.stringify(obj) === '{}');这个方法看似简单,但是代码看起来却很丑陋…强烈不推荐

JSON.stringify()是将JavaScript值转换为JSON字符串的方法。

本来以为有好多方法的。。可是经过测试,几乎全部失败告终。百度害人,有些文章还带着是全部错误的方法各种被转载。。。。。这就很尴尬了。所以,鉴于没找到更多的实现方法。那就只有俩啦!推荐第一种!