确定对象类型的最佳方法是Array以及为什么?。
var arr = [];
// Method #1
Array.isArray(arr);
// Method #2
toString.call(arr) == "[object Array]"
// Method #3
arr.constructor == Array
答案 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%的时间内工作,但有一天会突然失败。