判断一个对象是否为数组的几种方法

故事背景

// 无关紧要,可以跳过

在面试新浪实习生的时候,被面试官问道如何判断一个数组是否真的为一个数组?当时我就答出了我最引以为豪的方法,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

你可能感兴趣的:(判断一个对象是否为数组的几种方法)