使用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在不同的全局环境(如iframewindow)中无法正常工作,你可以在这里阅读更多相关信息。