12
var
arr =
new
array();
// 或 var arr = ;
我們知道,初始化後,即使陣列arr中沒有元素,也是乙個object。12
typeof
arr;
// "object"
既然是object,用於判斷條件時就會被轉化為true12
if
(arr)console.log(
"it's true"
);
// it's true
但是,如果將arr與布林值比較:12
34arr ==
false
;
// true
arr ==
true
;
// false
可是,如果把arr轉化為boolean,的確是true:12
boolean(arr);
// true
那arr與布林值比較時,到底發生了什麼?
原來,任意值與布林值比較,都會將兩邊的值轉化為number。
如arr與false比較,false轉化為0,而arr為空陣列,也轉化為0:12
34number(
false
)
// 0
number(arr)
// 0
所以,當空陣列作為判斷條件時,相當於true。當空陣列與布林值直接比較時,相當於false。
也就出現了以下令人繞圈的現象:12
== !;
// true
如何避免陣列與布林值比較時出現的坑呢?可以先把陣列轉化為布林值:12
boolean(arr) ==
true
;
// true
有同學問:
1new
array() == ;
必須是false,就和new array() == new array()一樣。是不同的兩個物件。
但有個問題很奇怪:12
3456
7new
array(1) ==
false
;
// true
// 或
[undefined] ==
false
;
// true
這個怎麼解釋呢?number(new array(1))為什麼會是0呢?位址引用不一樣12
var
arr =
new
array();
// 或 var arr = ;
我們知道,初始化後,即使陣列arr中沒有元素,也是乙個object。12
typeof
arr;
// "object"
既然是object,用於判斷條件時就會被轉化為true12
if
(arr)console.log(
"it's true"
);
// it's true
但是,如果將arr與布林值比較:12
34arr ==
false
;
// true
arr ==
true
;
// false
可是,如果把arr轉化為boolean,的確是true:12
boolean(arr);
// true
那arr與布林值比較時,到底發生了什麼?
原來,任意值與布林值比較,都會將兩邊的值轉化為number。
如arr與false比較,false轉化為0,而arr為空陣列,也轉化為0:12
34number(
false
)
// 0
number(arr)
// 0
所以,當空陣列作為判斷條件時,相當於true。當空陣列與布林值直接比較時,相當於false。
也就出現了以下令人繞圈的現象:12
== !;
// true
如何避免陣列與布林值比較時出現的坑呢?可以先把陣列轉化為布林值:12
boolean(arr) ==
true
;
// true
有同學問:
1new
array() == ;
必須是false,就和new array() == new array()一樣。是不同的兩個物件。
但有個問題很奇怪:12
3456
7new
array(1) ==
false
;
// true
// 或
[undefined] ==
false
;
// true
這個怎麼解釋呢?number(new array(1))為什麼會是0呢?位址引用不一樣
js 判斷是否為空物件 空陣列
js 判斷是否為空物件 空陣列 當需要判斷引數是否為空時,總希望 js 能夠提供原生的判斷方法,可惜並沒有,只能自己封裝了。isempty function obj 檢驗陣列 if array.prototype.isprototypeof obj obj.length 0 檢驗物件 if obje...
js 判斷是否為空物件 空陣列
判斷引數是否為空函式 isempty function obj 檢驗陣列 if array.prototype.isprototypeof obj obj.length 0 檢驗物件 if object.prototype.isprototypeof obj object.keys obj leng...
js 判斷是否為空物件 空陣列
當需要判斷引數是否為空時,總希望 js 能夠提供原生的判斷方法,可惜並沒有,只能自己封裝了。functionisempty obj if array.prototype.isprototypeof obj obj.length 0 if object.prototype.isprototypeof ...