JavaScript重难点实例精讲
上QQ阅读APP看书,第一时间看更新

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。