🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 数组类型的方法总结 数组是继承自Object的原型,typeof Array 返回值为 ‘object’。所以,如果想进一步判断就需要用以下方法: ## **方法一:Array.isArray()** isArray 判断是不是数组,返回一个布尔值。--该方法判断比较严格 ``` var arr = [1,2,3]; console.log(Array.isArray(arr)); //true ``` 简单好用,但Array.isArray()是在ES5中提出,可能会存在不支持此方法的情况 ## **方法二:Object.prototype.toString.call()** 每一个继承Object的对象都有toString方法,会返回[Object type],其中 type为对象的类型--该方法判断比较严格 ``` var arr = [1,2,3]; Object.prototype.toString.call(arr) === '[object Array]' ;// true ``` ## **方法三: Array.prototype.isPrototypeOf()** isPrototypeOf()用于检测一个对象是否存在与另一个对象的原型链上--该方法判断不严谨 语法:`prototypeObj.isPrototypeOf(object)` ``` var arr = [1,2,3]; console.log(Array.prototype.isPrototypeOf(arr)) //true ``` ## **方法四: child instanceof Array** ``` var arr = [1,2,3]; console.log(arr instanceof Array) //true ``` 总结: 1. Array.isArray 和 Object.prototype.toString.call 这两个判断比较严格 2. Array.prototype.isPrototypeOf 和 instanceof 这两个判断比较松散,比严谨 eg: ``` var obj_1=[1,2,3]; var obj_2 = {}; var obj_3 = {} obj_2.__proto__ = Array.prototype; obj_3.__proto__ = obj_1; console.log(obj_1 instanceof Array) //true console.log(obj_2 instanceof Array) //true console.log(obj_3 instanceof Array) //true console.log(Array.prototype.isPrototypeOf(obj_1)) //true console.log(Array.prototype.isPrototypeOf(obj_2)) //true console.log(Array.prototype.isPrototypeOf(obj_3)) //true console.log(Object.prototype.toString.call(obj_1) === '[object Array]') //true console.log(Object.prototype.toString.call(obj_2) === '[object Array]') //false console.log(Object.prototype.toString.call(obj_3) === '[object Array]') //false console.log(Array.isArray(obj_1)) //true console.log(Array.isArray(obj_2)) //false console.log(Array.isArray(obj_3)) //false ```