一、数组判断

  1. 通过 instanceof 运算符判断构造函数的prototype是否出现在对象的原型链中,返回boolean值

    1. [] instanceof Array; //true

    代码解析:instanceof运算符检测Array.prototype属性是否存在于变量a的原型链上 [].proto === Array.prototype,返回true
    存在问题:Symbol.hasInstance自定义instanceof的行为,所以instanceof不是百分百可信的;构造函数的prototype属性是可以修改的

  2. 通过实例的constructor属性,因为实例的constructor属性指向其构造函数

    1. []constructor === Array;//true
  3. 通过Object.prototype.toString.call()判断

    1. Object.prototype.toString.call([]) === '[object Array]';//true

    他强大的地方在于不仅仅可以检验是否为数组,比如是否是一个函数,是否是数字等等

  4. Array.isArray() 用于确定传递的值是否是一个数组,返回一个布尔值。

    1. Array.isArray([]) // true