js 空陣列 空物件判斷

2022-05-07 14:21:08 字數 3329 閱讀 3293

12

vararr =newarray();

// 或 var arr = ;

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

typeofarr;

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

有同學問:

1newarray() == ;

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

但有個問題很奇怪:12

3456

7newarray(1) ==false;

// true

// 或

[undefined] ==false;

// true

這個怎麼解釋呢?number(new array(1))為什麼會是0呢?位址引用不一樣12

vararr =newarray();

// 或 var arr = ;

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

typeofarr;

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

有同學問:

1newarray() == ;

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

但有個問題很奇怪:12

3456

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