js判断数组

95 阅读1分钟

前言

面试的时候,通常是会被问到,怎么去判断数组类型,今天在这里,进行自我总结一下

示例

let arr = [1, 2, 3, 4, 5, 6]
let str = '1, 2, 3, 4, 5, 6'
let obj = {}

1. Array.isArray(arr), 返回为结果为true,是数组类型

console.log('isArray', Array.isArray(arr)) //**true**
console.log('isArray', Array.isArray(str)) //**false**
console.log('isArray', Array.isArray(obj)) //**false**

2. arr instance Array, 返回为结果为true,是数组类型

console.log('instanceof', arr instanceof Array) //**true**
console.log('instanceof', str instanceof Array) //**false**
console.log('instanceof', str instanceof obj)   //**false**

3. Array.isArray(arr) && tostring, 返回为结果为[object Array],是数组类型

if(!Array.isArray){
    Array.isArray = function(arg){
    return Object.property.toString.call() = '[object,Array]'
    }
}
console.log(Object.property.toString.call(arr)) //**[object Array]**
console.log(Object.property.toString.call(str)) //**[object String]**
console.log(Object.property.toString.call(obj)) //**[object Object]**

4. constructor, 返回为结果为true,是数组类型

console.log(arr.constructor = Array) //**true**
console.log(str.constructor = Array) //**false**
console.log(obj.constructor = Array) //**false**

注意:

1. instanceof和constructor的弊端在于判断的数组必须定义在同一个页面,否则会返回fasle

2. 建议使用toString方法,兼容性好