ZetCode

JavaScript Array.isArray 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何使用 JavaScript 中的 Array.isArray 方法来检查数组类型。

数组类型检查

Array.isArray 方法确定传递的值是否为数组。 如果该值为数组,则返回 true,否则返回 false。 此方法在 JavaScript 中进行类型检查时特别有用。

与对数组返回 "object" 的 typeof 运算符不同,Array.isArray 专门识别数组对象。 这使其成为检查 JavaScript 代码中数组的最可靠方法。

该方法是在 ECMAScript 5 中引入的,用于解决可靠检测不同执行上下文中的数组的问题。 即使在不同的框架或窗口中创建数组,它也能正常工作。

Array.isArray() 基本示例

以下示例演示了 Array.isArray 方法的基本用法。

main.js
const fruits = ['apple', 'banana', 'orange'];
const notArray = 'This is a string';

console.log(Array.isArray(fruits));    // true
console.log(Array.isArray(notArray));  // false

我们使用 Array.isArray 检查两个不同的值。 第一个是实际数组,它返回 true,而第二个是字符串,它返回 false。 这演示了该方法的基本功能。

$ node main.js
true
false

检查不同的值类型

Array.isArray 方法可以将数组与其他 JavaScript 对象和原始类型区分开来。

main.js
console.log(Array.isArray([]));           // true
console.log(Array.isArray({}));           // false
console.log(Array.isArray(null));         // false
console.log(Array.isArray(undefined));    // false
console.log(Array.isArray(123));          // false
console.log(Array.isArray('array'));      // false
console.log(Array.isArray(true));         // false

我们使用 Array.isArray 测试各种 JavaScript 类型。 只有空数组字面量返回 true。 所有其他类型,包括对象、null、undefined、数字、字符串和布尔值,都返回 false。

$ node main.js
true
false
false
false
false
false
false

检查类似数组的对象

JavaScript 中的某些对象类似于数组,但不是真正的数组。 Array.isArray 可以将它们区分开来。

main.js
const realArray = [1, 2, 3];
const arrayLike = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
};

console.log(Array.isArray(realArray));  // true
console.log(Array.isArray(arrayLike));  // false

我们将一个真正的数组与一个类似数组的对象进行比较。 尽管两者都有索引属性和 length 属性,但只有真正的数组通过了 Array.isArray 检查。 这对于需要以不同方式处理这两种数组类型的函数来说非常重要。

$ node main.js
true
false

检查参数对象

函数内部可用的 arguments 对象是另一个类似于数组的对象,但不是真正的数组。

main.js
function test() {
  console.log(Array.isArray(arguments));
}

test(1, 2, 3);

在函数内部,我们检查 arguments 对象是否为数组。 尽管它具有类似数组的行为(数字索引和 length 属性),但它返回 false,因为它不是真正的数组。 现代 JavaScript 经常使用 rest 参数代替 arguments 以获得更好的数组兼容性。

$ node main.js
false

跨执行上下文检查

即使在检查来自不同执行上下文(如 iframe 或 window)的数组时,Array.isArray 也能正常工作。

main.js
// Simulating an array from another context
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const foreignArray = window.frames[window.frames.length-1].Array;
const arr = new foreignArray(1, 2, 3);

console.log(Array.isArray(arr));  // true
document.body.removeChild(iframe);

我们创建一个 iframe 来模拟不同的执行上下文,并检查在该上下文中创建的数组。 与 instanceof 检查不同,Array.isArray 正确地将外部数组标识为真正的数组。 这证明了它在不同上下文中的可靠性。

$ node main.js
true

来源

Array.isArray() - 语言参考

在本文中,我们演示了如何使用 Array.isArray 方法来检查 JavaScript 中的数组类型。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有十多年的编程教学经验。

列出 所有 JS 数组函数。