Array.prototype.every()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

every() 方法用于 Array 实例,如果数组中有一个元素不满足提供的测试函数,则返回 false。否则,它返回 true

试一试

const isBelowThreshold = (currentValue) => currentValue < 40;

const array1 = [1, 30, 39, 29, 10, 13];

console.log(array1.every(isBelowThreshold));
// Expected output: true

语法

js
every(callbackFn)
every(callbackFn, thisArg)

参数

callbackFn

一个用于在数组的每个元素上执行的函数。它应该返回一个真值(truthy value)来表示该元素通过测试,否则返回一个假值(falsy value)。该函数将使用以下参数调用:

element

数组中正在处理的当前元素。

index

数组中正在处理的当前元素的索引。

array

调用 every() 的数组。

thisArg 可选

在执行 callbackFn 时用作 this 的值。请参阅 迭代方法

返回值

true,除非 callbackFn 为数组元素返回一个假值(falsy value),在这种情况下会立即返回 false

描述

every() 方法是一个迭代方法。它会为数组中的每个元素调用一次提供的 callbackFn 函数,直到 callbackFn 返回一个假值(falsy value)。如果找到这样的元素,every() 会立即返回 false 并停止迭代数组。否则,如果 callbackFn 对所有元素都返回一个真值(truthy value),every() 则返回 true。有关这些方法如何工作的更多信息,请阅读迭代方法部分。

every 类似于数学中的“对所有”(for all)量词。特别是,对于空数组,它返回 true。(空真空集中的所有元素都满足任何给定条件是空真的。

callbackFn 仅对具有已赋值的数组索引调用。对于稀疏数组中的空槽,它不会被调用。

every() 方法是通用的。它只要求 this 值具有 length 属性和整数键属性。

示例

测试所有数组元素的大小

下面的示例测试数组中的所有元素是否都大于或等于 10。

js
function isBigEnough(element, index, array) {
  return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true

检查一个数组是否是另一个数组的子集

下面的示例测试一个数组中的所有元素是否都存在于另一个数组中。

js
const isSubset = (array1, array2) =>
  array2.every((element) => array1.includes(element));

console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 7, 6])); // true
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 8, 7])); // false

使用 callbackFn 的第三个参数

如果想访问数组中的另一个元素,array 参数很有用。下面的示例首先使用 filter() 提取正数,然后使用 every() 检查数组是否严格递增。

js
const numbers = [-2, 4, -8, 16, -32];
const isIncreasing = numbers
  .filter((num) => num > 0)
  .every((num, idx, arr) => {
    // Without the arr argument, there's no way to easily access the
    // intermediate array without saving it to a variable.
    if (idx === 0) return true;
    return num > arr[idx - 1];
  });
console.log(isIncreasing); // true

在稀疏数组上使用 every()

every() 不会在空槽上运行其谓词。

js
console.log([1, , 3].every((x) => x !== undefined)); // true
console.log([2, , 2].every((x) => x === 2)); // true

在非数组对象上调用 every()

every() 方法读取 thislength 属性,然后访问小于 length 的每个非负整数键属性,直到它们都被访问,或者 callbackFn 返回 false

js
const arrayLike = {
  length: 3,
  0: "a",
  1: "b",
  2: "c",
  3: 345, // ignored by every() since length is 3
};
console.log(
  Array.prototype.every.call(arrayLike, (x) => typeof x === "string"),
); // true

规范

规范
ECMAScript® 2026 语言规范
# sec-array.prototype.every

浏览器兼容性

另见