js判断值是否是数组的几种方式

1,035 阅读1分钟

判断一个值是否是数组是前端开发中经常遇到的场景,所以本文特地总结了几种常见的判断方式。

1.instanceof

不足之处
instanceof判断的是检测Array.prototype属性是否存在于变量a的原型链上,但是因为a的原型是可以被修改的,所以其实不稳定;另外,多个iframe的场景,判断会失效。

2.constructor

不足之处 和上面一样

3.Object.prototype.toString.call()

判断Object.prototype.toString.call()是否等于[object Array] Object.prototype.toString也可以用来对其他类型进行判断

兼容性极好

4.Array.isArray()

是es5的语法 在es5以下不支持。

结论

使用Array.isArray()是比较好的方案,毕竟这是官方的api,对于不支持es5的场景可以用Object.prototype.toString.call()代替

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}