使用Array.isArray()对JavaScript数组进行类型检查
要确定一个对象是否为数组,你可以使用Array.isArray()
或instanceof
运算符。虽然这两种方法都适用于使用数组字面量语法或Array
构造函数创建的数组,但它们之间有一个关键的区别。Array.isArray()
更可靠,因为它可以处理跨域对象,比如在iframe
中创建的对象。
let iframeEl = document.createElement('iframe');
document.body.appendChild(iframeEl);
iframeArray = window.frames[window.frames.length - 1].Array;
let array1 = new Array(1,1,1,1);
let array2 = new iframeArray(1,1,1,1);
console.log(array1 instanceof Array); // true
console.log(Array.isArray(array1)); // true
console.log(array2 instanceof Array); // false
console.log(Array.isArray(array2)); // true
正如前面的示例所示,当在iframe
中使用instanceof
时会出现问题。然而,Array.isArray()
无论数组是如何实例化的,都会产生正确的结果。
如果你想知道为什么instanceof Array
在不同的全局环境(如iframe
或window
)中无法正常工作,你可以在这里阅读更多相关信息。