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呢?
樂意黎
判斷是空物件還是空陣列
方法一 利用josn.stringify if json.stringify res.data else方法二objeck.keys objeck.keys 方法會返回乙個由給定物件的自身可列舉屬性組成的陣列,陣列中屬性名的排列順序和使用 for in 迴圈遍歷該物件時返回的順序一致,該方法屬於 e...
js 空陣列 空物件判斷
12 vararr newarray 或 var arr 我們知道,初始化後,即使陣列arr中沒有元素,也是乙個object。12 typeofarr object 既然是object,用於判斷條件時就會被轉化為true12 if arr console.log it s true it s tru...
js空陣列型別比較
1.js空陣列是true還是false?var arr new array 當乙個陣列初始化後,即使arr陣列中沒有元素,也是乙個object。typeof arr object 既然是object 判斷時就會被轉化為true boolean arr true 但是如果將arr與布林值比較 arr ...