1. 程式人生 > >js 空陣列是true還是false

js 空陣列是true還是false

var arr = new Array();  // 或 var arr = [];
typeof arr; // "object"

既然是object,用於判斷條件時就會被轉化為true

if(arr)console.log("it's true");    // it's true

但是,如果將arr與布林值比較:

arr == false;   // true
arr == true;    // false

可是,如果把arr轉化為Boolean,的確是true:

Boolean(arr);   // true

那arr與布林值比較時,到底發生了什麼?
原來,任意值與布林值比較,都會將兩邊的值轉化為Number。
如arr與false比較,false轉化為0,而arr為空陣列,也轉化為0:

Number(false)   // 0
Number(arr)     // 0

所以,當空陣列作為判斷條件時,相當於true。當空陣列與布林值直接比較時,相當於false。

也就出現了以下令人繞圈的現象:

[] == ![];  // true

如何避免陣列與布林值比較時出現的坑呢?可以先把陣列轉化為布林值:

Boolean(arr) == true;   // true
new Array() == [];  //false
new Arry() == new Arry();   //false

但有個問題很奇怪:

new Array(1) == false;
// true

// 或
[undefined] == false; // true