故事背景
// 无关紧要,可以跳过
在面试新浪实习生的时候,被面试官问道如何判断一个数组是否真的为一个数组?当时我就答出了我最引以为豪的方法,Object.prototype.toString.call(arr),这个牛逼的方法可以判断任何引用类型的数据,但当我自信满满的看向面试官的时候,只见他一脸尴尬,这是我也尴尬了(难道我用的方法太高端了?不怕,我还有Plan B)。
“当然还有另一个办法,就是用instanceof”
看到面试官表情稍微放松了些顿时心想“稳了!”。
“恩,不错,确实你说的第一个方法太高端了,我们一般都不用这么高端的方法”。
尴尬。
当面试官问我还有没有其他的方法时我思考了十秒(装的),回答说:“想不到了”。
干,知识面还不够广啊。
正题
1. Array.isArray()
var arr = [1, 2, 3];
Array.isArray(arr); // true
ES5新特性,需考虑兼容性:(参考MDN)
Feature | Chrome | Firefox (Gecko) | IE | Opera | Safari |
---|---|---|---|---|---|
Basic support | 5 | 4.0 (2.0) | 9 | 10.5 | 5 |
若因为兼容性问题不能用,MDN提供了另一种方法,也就是下面要说的方法2。
干,这个方法我当时居然没想到。
2. Object.prototype.toString
var arr = [1, 2, 3];
Object.prototype.toString.call(arr); // [object Array]
这个方法绝对是无敌的,绝逼能准确判断数组。
如果经常要用的话,建议用下面的方法来写:
if (!toString) {
var toString = Object.prototype.toString;
}
toString.call(arr1);
toString.call(arr2);
...
3. instanceof
var arr = [];
arr instanceof Array; // true
总结下,一共有这几种方法判断数组:
1. Array.isArray()(最好在初始化时判断下是否支持)
2. instanceof
3. Object.prototype.toString
网友评论