Javascript 确定阵列类型的最佳方法

Javascript 确定阵列类型的最佳方法,javascript,arrays,Javascript,Arrays,确定对象类型的最佳方法是数组,为什么 var arr = []; // Method #1 Array.isArray(arr); // Method #2 toString.call(arr) == "[object Array]" // Method #3 arr.constructor == Array 这三种方法都可以用来测试变量是否为数组类型。然而,也有一些细微差别。我将从最后一个开始到第一个 方法#3.如果所讨论的变量来自其他winndow/frame,则该方法将不起作用。

确定对象类型的最佳方法是数组,为什么

var arr = [];

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

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

// Method #3
arr.constructor == Array

这三种方法都可以用来测试变量是否为数组类型。然而,也有一些细微差别。我将从最后一个开始到第一个

方法#3.如果所讨论的变量来自其他winndow/frame,则该方法将不起作用。在这种情况下,构造函数将指向不同的
数组
对象,该检查将返回
false
。出于同样的原因,
arr instanceof Array
也不是防弹的。所以它不是100%可靠的

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


方法#1。是ES5中的一个,最终应该用于测试数组类型,不管数组来自哪个领域(如iframe)。这是列表中最好的。

首选方法是使用
Array.isArray
。这在ES5语言规范中有所体现,并且受到浏览器的良好支持

如果您计划支持旧浏览器,可以在上找到polyfill。polyfill基本上是您的第二种选择

如果使用iFrame,最后一个选项将不起作用

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

原因是
数组
构造函数对于每个
窗口
对象都是不同的。使用此方法检测阵列将在99%的时间内工作,但有一天会突然失败。

我认为最好的方法是使用专门为此目的构建的函数,即
Array.isArray
。我看不出其他两种方法如何更好,但也许有人能证明我错了。FWIW,这些方法都正确地在函数中定义的特殊
参数
对象上生成
false
。或者,文本副本: