- 使用數(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。 - 使用
instanceof和constructor檢測是否為數(shù)組在一定程度上是便利、好用的,但是也存在著一些問題。主要是在判斷上,可能會存在多個全局環(huán)境的問題(iframe)這種情況不多見,詳細可以網(wǎng)上查查。