确定阵列类型的最佳方法

时间:2015-08-07 05:58:56

标签: javascript arrays

确定对象类型的最佳方法是Array以及为什么?。

var arr = [];

// Method #1
Array.isArray(arr);

// Method #2 
toString.call(arr) == "[object Array]"

// Method #3
arr.constructor == Array

2 个答案:

答案 0 :(得分:3)

所有三种方法都可用于测试变量是否为Array类型。但是,有一些细微差别。我将从最后一个开始到第一个。

方法#3。如果有问题的变量来自其他winndow / frame,则无效。在这种情况下,构造函数将指向不同的Array对象,此检查将返回false。出于同样的原因,arr instanceof Array不是防弹的。所以它不是100%可靠。

方法#2 。这是传统上用于验证数组类型的方法。实际上,Array.isArray polyfill基于此方法。唯一的缺点是它既麻烦又冗长。

方法#1 。是否应该最终用于测试数组类型的ES5中的那个,无论是什么领域数组(如iframe)。这是列表中最好的。

答案 1 :(得分:0)

首选方法是使用Array.isArray。这存在于ES5语言规范中,并得到浏览器的很好支持。

如果您打算支持旧浏览器,可以在MDN上找到填充。 polyfill基本上是你的第二选择。

如果您使用iframe,最后一个选项将无效。

var arr = myIframe.contentWindow.myArray;
console.log(obj.constructor === Array); //false

原因是Array构造函数对于每个window对象是不同的。使用它来检测数组将在99%的时间内工作,但有一天会突然失败。