js 空陣列是true還是false
阿新 • • 發佈:2019-01-29
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