js-04如何判断数组

104 阅读1分钟

判断数组类型有三大类方法:

  1. Array.isArray(arr),这个是es6新增的方法,使用前要考虑到兼容性

  2. Object.prototype.toString.call(arr),可以精确的判断复杂数据类型

  3. 通过构造函数、原型来判断,有以下几种方法,原理基本一样\

    • 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两种方法