如何在 JavaScript 中判斷一個值是否為數(shù)組?

  • 使用數(shù)組自帶 Array.prototype.isArray() 方法來檢查值是否為數(shù)組。
const str = 'abc'
const arr = [1, 2, 3]

console.log(arr.isArray(arr)) // true
  • 如果環(huán)境不支持 Array.prototype.isArray() 方法,則可以使用 polyfill 實現(xiàn),使用 Object.prototype.toString.call(arr) 進行類型判斷。
// 舊瀏覽器
function isArray(value){ 
    return Object.prototype.toString.call(value) === '[object Array]'
}

// 舊瀏覽器兼容
if (!Array.isArray) {
  Array.isArray = function (value) {
    return Object.prototype.toString.call(value) === '[object Array]'
  }
}

isArray(arr) // true
isArray(str) // false
  • 使用 instanceof 檢驗構(gòu)造函數(shù)的 prototype 屬性是否出現(xiàn)在對象的原型鏈中,返回一個布爾值。
arr instanceof Array // true
  • 使用 constructor 判斷該變量的構(gòu)造函數(shù)是否為 Array
arr.constructor === Array // true
  • 使用一些提供好的函數(shù)庫,如 Lodash 的 _.isArray 方法檢查 value 是否歸類為 Array 對象。
console.log(_.isArray(arr)) // true
console.log(_.isArray(str)) // false

我們一般會組合前兩種方法實現(xiàn)一個完美的 isArray:

const isArray = Array.isArray || (list => ({}).toString.call(list) === '[object Array]')

npm 上就有一個 isarray 包使用這種方式。

注意

  • typeof 檢測出的數(shù)組為 object
  • 使用 instanceofconstructor 檢測是否為數(shù)組在一定程度上是便利、好用的,但是也存在著一些問題。主要是在判斷上,可能會存在多個全局環(huán)境的問題(iframe)這種情況不多見,詳細可以網(wǎng)上查查。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容