最终解

  1. // 声明
  2. const isArray =
  3. Array.isArray ||
  4. function (value) {
  5. return toString.call(value) === '[object Array]'
  6. }
  1. // 使用
  2. isArray([])

1. (es2015) Array.isArray

  • 字面意思,用于确定传递的值是否是一个 Array
  • 当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes,也即是跨框架传入的值,例如iframe里声明一个array,把它赋给父组件的变量,这种情况只有 Array.isArray 和 Object.prototype.toString.call(arg)=='[object Array]' 能识别出来。
  • 并且因为es2015的方法有兼容问题,建议这种和下一种结合使用,也即是上文给出的最终解:
    1. // 声明
    2. const isArray =
    3. Array.isArray ||
    4. function (value) {
    5. return toString.call(value) === '[object Array]'
    6. }

2. Object.prototype.toString

  1. var array = [1,23,4];
  2. function isArray(arg){
  3. return Object.prototype.toString.call(arg)=='[object Array]';
  4. }
  5. console.log(isArray(ary));

3. instanceof

  1. var ary = [1,23,4];
  2. console.log(ary instanceof Array)//true;
  • 在不会跨iframe赋值的情况下,最简单的写法
  • 缺点在 「1」中有讲解

4. constructor

  1. var array = [1,23,4];
  2. array.__proto__.constructor === Array
  3. array.constructor === Array
  • 缺点同3