官术网_书友最值得收藏!

1.6 JavaScript中常用的判空方法

在JavaScript中判斷一個(gè)變量是否為空時(shí),我們往往會(huì)想到對變量取反,然后判斷是否為true。


if(!x){}

這是一個(gè)便捷判斷變量是否為空的方法,但是其涉及的場景卻很多,這里我們就分多種情況來討論變量判空的方法。

1. 判斷變量為空對象

(1)判斷變量為null或者undefined

判斷一個(gè)變量是否為空時(shí),可以直接將變量與null或者undefined相比較,需要注意雙等于(==)和三等于(===)的區(qū)別。


if(obj == null) {} // 可以判斷null或者unde?ned

if(obj === unde?ned) {} // 只能判斷unde?ned

(2)判斷變量為空對象{}

判斷一個(gè)變量是否為空對象時(shí),可以通過for...in語句遍歷變量的屬性,然后調(diào)用hasOwnProperty()函數(shù),判斷是否有自身存在的屬性,如果存在則不為空對象,如果不存在自身的屬性(不包括繼承的屬性),那么變量為空對象。


// 判斷變量為空
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,很明顯是一個(gè)空對象,返回“true”。

而變量p是通過new操作符得到的Person對象的實(shí)例,所以p會(huì)繼承Person原型鏈上的name屬性,但是因?yàn)椴皇亲陨淼膶傩?,所以?huì)被判為空,返回“true”。

2. 判斷變量為空數(shù)組

判斷變量是否為空數(shù)組時(shí),首先需要判斷變量是否為數(shù)組,然后通過數(shù)組的length屬性確定。


arr instanceof Array && arr.length === 0

當(dāng)以上兩個(gè)條件都滿足時(shí),變量是一個(gè)空數(shù)組。

3. 判斷變量為空字符串

判斷變量是否為空字符串時(shí),可以直接將其與空字符串相比較,或者調(diào)用trim()函數(shù)去掉前后的空格,然后判斷字符串的長度。


str == '' || str.trim().length == 0;

當(dāng)滿足以上兩個(gè)條件中任意一個(gè)時(shí),變量是一個(gè)空字符串。

4. 判斷變量為0或者NaN

當(dāng)一個(gè)變量為Number類型時(shí),判空即判斷變量是否為0或者NaN,因?yàn)镹aN與任何值比較都為false,所以我們可以通過取非運(yùn)算符完成。


!(Number(num) && num) == true;

當(dāng)上述語句返回“true”時(shí),表示變量為0或者NaN。

5. !x == true的所有情況

本小節(jié)一開始就講到!x為true時(shí),會(huì)包含很多種情況,這里我們一起來總結(jié)下。

· 變量為null。

· 變量為undefined。

· 變量為空字符串' '。

· 變量為數(shù)字0,包括+0、-0。

· 變量為NaN。

主站蜘蛛池模板: 湟源县| 扎囊县| 海口市| 临西县| 夏河县| 成武县| 乌审旗| 湖州市| 敖汉旗| 吴江市| 广安市| 黄浦区| 灌南县| 安远县| 泰来县| 宜城市| 博野县| 衡山县| 勃利县| 油尖旺区| 衡水市| 新沂市| 栖霞市| 基隆市| 都兰县| 来安县| 卢湾区| 怀宁县| 鄂托克旗| 河北区| 文安县| 英吉沙县| 启东市| 肇源县| 信丰县| 咸宁市| 红桥区| 湘潭市| 奉节县| 渝北区| 祁东县|