Iterator.prototype.every()

基準線 2025
新推出

自 ⁨2025 年 3 月⁩ 起,此功能可在最新的裝置和瀏覽器版本上使用。此功能可能在舊裝置或瀏覽器上無法正常工作。

every() 方法與 Array.prototype.every() 類似:它測試由迭代器生成的所有元素是否都通過了提供的函式實現的測試。它返回一個布林值。

語法

js
every(callbackFn)

引數

callbackFn

一個用於執行迭代器產生的每個元素的函式。它應該返回一個真值以指示元素透過測試,否則返回一個假值。該函式以以下引數呼叫:

element

正在處理的當前元素。

index

正在處理的當前元素的索引。

返回值

如果 callbackFn 為每個元素都返回一個真值,則返回 true。否則,返回 false

描述

every() 迭代迭代器,併為每個元素呼叫一次 callbackFn 函式。如果回撥函式返回一個假值,它會立即返回 false。否則,它將迭代直到迭代器結束並返回 true。如果 every() 返回 false,則透過呼叫其 return() 方法來關閉底層迭代器。

迭代器輔助函式相較於陣列方法的主要優勢在於它們是惰性的,這意味著它們只在需要時才生成下一個值。這避免了不必要的計算,並且也允許它們與無限迭代器一起使用。對於無限迭代器,every() 會在找到第一個假值後立即返回 false。如果 callbackFn 始終返回真值,則該方法永遠不會返回。

示例

使用 every()

js
function* fibonacci() {
  let current = 1;
  let next = 1;
  while (true) {
    yield current;
    [current, next] = [next, current + next];
  }
}

const isEven = (x) => x % 2 === 0;
console.log(fibonacci().every(isEven)); // false

const isPositive = (x) => x > 0;
console.log(fibonacci().take(10).every(isPositive)); // true
console.log(fibonacci().every(isPositive)); // Never completes

呼叫 every() 總是會關閉底層迭代器,即使該方法提前返回。迭代器永遠不會處於半途的狀態。

js
const seq = fibonacci();
console.log(seq.every(isEven)); // false
console.log(seq.next()); // { value: undefined, done: true }

規範

規範
ECMAScript® 2026 語言規範
# sec-iterator.prototype.every

瀏覽器相容性

另見