判断一个值是否是数组是前端开发中经常遇到的场景,所以本文特地总结了几种常见的判断方式。
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]';
};
}