判断数组类型有三大类方法:
-
Array.isArray(arr),这个是es6新增的方法,使用前要考虑到兼容性
-
Object.prototype.toString.call(arr),可以精确的判断复杂数据类型
-
通过构造函数、原型来判断,有以下几种方法,原理基本一样\
- arr instanceof Array
- arr.constructor === Array
- arr.--proto__ === Array.prototype
- Object.getPrototypeOf(arr) === Array.prototype
- Array.prototype.isPrototypeOf(arr)
以上几种写法呢,有一个缺点,就是对象的原型是可以随意修改的,如下
```
let obj = {};
obj.__proto__ = Array.prototype;
obj instanceof Array ;// true;
obj.constructor === Array;//true
...
上面通过原型判断的方法就全部沦陷了
```
所以实战中,推荐使用1、2两种方法