
1.6 JavaScript中常用的判空方法
在JavaScript中判断一个变量是否为空时,我们往往会想到对变量取反,然后判断是否为true。
if(!x){}
这是一个便捷判断变量是否为空的方法,但是其涉及的场景却很多,这里我们就分多种情况来讨论变量判空的方法。
1. 判断变量为空对象
(1)判断变量为null或者undefined
判断一个变量是否为空时,可以直接将变量与null或者undefined相比较,需要注意双等于(==)和三等于(===)的区别。
if(obj == null) {} // 可以判断null或者undefined if(obj === undefined) {} // 只能判断undefined
(2)判断变量为空对象{}
判断一个变量是否为空对象时,可以通过for...in语句遍历变量的属性,然后调用hasOwnProperty()函数,判断是否有自身存在的属性,如果存在则不为空对象,如果不存在自身的属性(不包括继承的属性),那么变量为空对象。
// 判断变量为空 function isEmpty(obj) { for(let key in obj) { if(obj.hasOwnProperty(key)) { return false; } } return true; }
我们通过以下语句来做测试。
// 定义空的对象字面量 var o = {}; function Person() {} Person.prototype.name = 'kingx'; // 通过new操作符获取对象 var p = new Person(); console.log(isEmpty(o)); // true console.log(isEmpty(p)); // true
针对变量o,很明显是一个空对象,返回“true”。
而变量p是通过new操作符得到的Person对象的实例,所以p会继承Person原型链上的name属性,但是因为不是自身的属性,所以会被判为空,返回“true”。
2. 判断变量为空数组
判断变量是否为空数组时,首先需要判断变量是否为数组,然后通过数组的length属性确定。
arr instanceof Array && arr.length === 0
当以上两个条件都满足时,变量是一个空数组。
3. 判断变量为空字符串
判断变量是否为空字符串时,可以直接将其与空字符串相比较,或者调用trim()函数去掉前后的空格,然后判断字符串的长度。
str == '' || str.trim().length == 0;
当满足以上两个条件中任意一个时,变量是一个空字符串。
4. 判断变量为0或者NaN
当一个变量为Number类型时,判空即判断变量是否为0或者NaN,因为NaN与任何值比较都为false,所以我们可以通过取非运算符完成。
!(Number(num) && num) == true;
当上述语句返回“true”时,表示变量为0或者NaN。
5. !x == true的所有情况
本小节一开始就讲到!x为true时,会包含很多种情况,这里我们一起来总结下。
· 变量为null。
· 变量为undefined。
· 变量为空字符串' '。
· 变量为数字0,包括+0、-0。
· 变量为NaN。