Array.isArray()

基线 广泛可用

此功能已完善,可在许多设备和浏览器版本上运行。它已在所有浏览器中可用,自 2015 年 7 月.

**Array.isArray()** 静态方法用于确定传递的值是否为一个 Array

试一试

语法

js
Array.isArray(value)

参数

value

要检查的值。

返回值

如果 value 是一个 Array,则返回 true;否则返回 false。如果 value 是一个 TypedArray 实例,则始终返回 false

描述

Array.isArray() 检查传递的值是否为 Array。它不会检查值的原型链,也不依赖于它所附加的 Array 构造函数。它对使用数组字面量语法或 Array 构造函数创建的任何值都返回 true。这使得它可以安全地用于跨域对象,其中 Array 构造函数的标识不同,因此会导致 instanceof Array 失败。

有关更多详细信息,请参阅文章 “确定 JavaScript 对象是否为数组的绝对准确方法”

Array.isArray() 还会拒绝原型链中具有 Array.prototype 但不是实际数组的对象,而 instanceof Array 会接受这些对象。

示例

使用 Array.isArray()

js
// all following calls return true
Array.isArray([]);
Array.isArray([1]);
Array.isArray(new Array());
Array.isArray(new Array("a", "b", "c", "d"));
Array.isArray(new Array(3));
// Little known fact: Array.prototype itself is an array:
Array.isArray(Array.prototype);

// all following calls return false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray("Array");
Array.isArray(true);
Array.isArray(false);
Array.isArray(new Uint8Array(32));
// This is not an array, because it was not created using the
// array literal syntax or the Array constructor
Array.isArray({ __proto__: Array.prototype });

instanceof vs. Array.isArray()

在检查 Array 实例时,Array.isArray()instanceof 更可取,因为它可以在跨域中使用。

js
const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
const xArray = window.frames[window.frames.length - 1].Array;
const arr = new xArray(1, 2, 3); // [1, 2, 3]

// Correctly checking for Array
Array.isArray(arr); // true
// The prototype of arr is xArray.prototype, which is a
// different object from Array.prototype
arr instanceof Array; // false

规范

规范
ECMAScript 语言规范
# sec-array.isarray

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参见