js 空陣列是true還是false

2021-07-11 06:00:54 字數 2055 閱讀 1057

1

2

vararr =newarray();

// 或 var arr = ;

我們知道,初始化後,即使陣列arr中沒有元素,也是乙個object。

1

2

typeofarr;

// "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

newarray() == ;

必須是false,就和new array() == new array()一樣。是不同的兩個物件。

但有個問題很奇怪:

1

2

3

4

5

6

7

newarray(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 ...