一、判断数组的方式:
- 通过Object.prototype.toString.call()做判断
Object.prototype.toString.call(obj).slice(8,-1) === 'Array'; - 通过原型链做判断
obj.__proto__ === Array.prototype; - 通过ES6的Array.isArray()做判断
Array.isArrray(obj); - 通过instanceof做判断
obj instanceof Array - 通过Array.prototype.isPrototypeOf
Array.prototype.isPrototypeOf(obj)
二、总结
1.Array.prototype.isPrototypeOf(arr)
判断Array是否在arr的原型链上,返回布尔类型,如果存在返回true,否则返回false
2.instanceof
判断前者是否继承自后者
3.Object.prptptype.toString.call()
每一个继承 Object 的对象都有 toString方法,如果 toString 方法没有重写的话,会返回 [Object type],其中type为对象的类型。
但当变量类型不为对象时,使用 toString 方法会直接返回数据内容的字符串,所以我们需要使用call或者apply方法来改变toString方法的执行上下文。
4.Array.isArray()
ES6中判断数组的方法,返回的是boolean值。