js 空數組是true還是false


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

我們知道,初始化后,即使數組arr中沒有元素,也是一個object。

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 Array() == new Array()一樣。是不同的兩個對象。

但有個問題很奇怪:

new Array(1) == false;
// true
//
[undefined] == false;
// true

這個怎么解釋呢?Number(new Array(1))為什么會是0呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM