假定一個數(shù)組:
const arr = [1, 2, 3]
方式一
通過 Object.prototype.toString
function isArray(arr) {
Object.prototype.toString.call(arr) === '[object Array]'
}
console.log(isArray(arr)) // true
缺點:利用 toStringTag 更改字符值斑粱,可造成誤判
const obj = {
[Symbol.toStringTag]: 'Array'
}
console.log(isArray(obj)) // true
console.log(Object.prototype.toString.call(obj)) // [object Array]
方式二
通過 instanceof
function isArray(arr) {
return arr instanceof Array
}
console.log(isArray(arr)) // true
缺點:
1、通過** setPrototypeOf**更改原型怀樟,可造成誤判
const obj = {}
Object.setPrototypeOf(obj, Array.prototype)
console.log(isArray(obj)) // true
2末盔、在iframe環(huán)境構造筑舅,會存在誤判
/** 獲取頁面上的iframe */
const iframe = document.querySelect('iframe')
/** 獲取iframe環(huán)境下的構造函數(shù) */
const Array2 = iframe.content Window.Array
/** 創(chuàng)建數(shù)組 */
const arr2 = new Array2()
console.log(isArray(arr2)) // false
方式三(推薦)
通過 Array.isArray()
console.log(Array.isArray(arr)) // true
// 檢測方式二中的obj
console.log(isArray(obj)) // false
// 檢測方式三中的arr2
console.log(isArray(arr2)) // true
原理:通過檢測是否經(jīng)過Array的構造函數(shù) f Array() { native code}