在JavaScript中,數組是一種非常重要的數據類型。判斷一個變量是否為數組,在開發過程中也是經常使用的操作。本文將從多個方面對JavaScript中判斷是否為數組的方法進行詳解。
一、typeOf方法
typeOf方法可以判斷一個變量的數據類型。對於數組類型,返回的數據是”object”。因此,可以使用typeOf方法來判斷數組。
function isArray(obj){
return Object.prototype.toString.call(obj)==='[object Array]';
}
console.log(isArray([])); //true
console.log(isArray({})); //false
console.log(isArray(null)); //false
console.log(isArray(undefined)); //false
console.log(isArray(123)); //false
console.log(isArray('')); //false
上述代碼中,我們使用了typeOf判斷,但是由於typeOf無法判斷null和undefined的類型,所以我們還需要進行補充判斷。通過調用Object的原型方法toString(),我們可以獲取當前對象的類型的字符串表示。對於數組類型,返回的數據是”[object Array]”。因此,我們可以寫出isArray函數的代碼。
二、instanceof方法
instanceof方法可以判斷一個對象是否為特定類的實例。對於數組類型,我們可以使用Array類來判斷。
console.log([] instanceof Array); //true
console.log({} instanceof Array); //false
console.log(null instanceof Array); //false
console.log(undefined instanceof Array); //false
console.log(123 instanceof Array); //false
console.log('' instanceof Array); //false
利用instanceof判斷一個對象是否為Array的實例,這個方法看似簡單,但是實際使用過程中需要注意。
首先,instanceof無法處理原生類型。例如數字、字符串、布爾類型無法使用instanceof判斷。
其次,如果當前環境中存在多個全局對象,例如開發中使用了多個iframe,那麼instanceof的判斷就會失效。這是因為instanceof是通過檢查對象的原型鏈中是否存在特定類的原型來判斷對象是否為特定類的實例。如果出現多個全局對象,那麼會存在多個版本的Array類,就會造成判斷的混淆。
三、Array.isArray方法
ECMAScript 5標準中新增了Array.isArray方法,可以判斷一個對象是否為數組。該方法不會受到多個全局對象的影響,並且可以正確判斷數組對象。
console.log(Array.isArray([])); //true
console.log(Array.isArray({})); //false
console.log(Array.isArray(null)); //false
console.log(Array.isArray(undefined)); //false
console.log(Array.isArray(123)); //false
console.log(Array.isArray('')); //false
四、constructor屬性
constructor屬性可以返回對象的構造函數。對於數組類型,我們可以使用Array構造函數來判斷。
function isArray(obj){
return obj && obj.constructor === Array;
}
console.log(isArray([])); //true
console.log(isArray({})); //false
console.log(isArray(null)); //false
console.log(isArray(undefined)); //false
console.log(isArray(123)); //false
console.log(isArray('')); //false
上述代碼中,我們首先判斷obj的值是否為null或undefined。因為null和undefined沒有構造函數屬性,所以如果不進行判斷,就會拋出錯誤。接着,我們判斷obj的構造函數是否為Array。如果是,就說明obj是一個數組。
五、jQuery.isArray方法
jQuery中也提供了isArray方法,可以用於判斷一個變量是否為數組。該方法內部實現和Array.isArray方法類似。
console.log(jQuery.isArray([])); //true
console.log(jQuery.isArray({})); //false
console.log(jQuery.isArray(null)); //false
console.log(jQuery.isArray(undefined)); //false
console.log(jQuery.isArray(123)); //false
console.log(jQuery.isArray('')); //false
需要注意的是,使用該方法前需要先加載jQuery庫文件。
小結
在JavaScript中判斷是否為數組的方法有很多,包括typeOf、instanceof、Array.isArray、constructor屬性以及jQuery提供的isArray方法。其中,ECMAScript 5標準中新增的Array.isArray方法使用最為廣泛,結合原型鏈屏蔽特性,可以保證多個全局對象下的正確性判斷。使用時需要根據實際情況進行選用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/159619.html