js 空數組 空對象判斷


js 空數組是true還是false

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

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

1
2
typeof  arr;
// "object"

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

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

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

1
2
3
4
arr ==  false ;
// true
arr ==  true ;
// false

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

1
2
Boolean(arr);
// true

那arr與布爾值比較時,到底發生了什么?

原來,任意值與布爾值比較,都會將兩邊的值轉化為Number。

如arr與false比較,false轉化為0,而arr為空數組,也轉化為0:

1
2
3
4
Number( false )
// 0
Number(arr)
// 0

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

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

1
2
[] == ![];
// true

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

1
2
Boolean(arr) ==  true ;
// true

有同學問:

1
new  Array() == [];

必須是false,就和new Array() == new Array()一樣。是不同的兩個對象。

但有個問題很奇怪:

1
2
3
4
5
6
7
new  Array(1) ==  false ;
// true
 
// 或
 
[undefined] ==  false ;
// true

這個怎么解釋呢?Number(new Array(1))為什么會是0呢?地址引用不一樣


免責聲明!

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



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