Set.prototype.forEach()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

Set 例項的 forEach() 方法會在該集合中的每個值上執行一次提供的函式,執行順序為插入順序。

試一試

function logSetElements(value1, value2, set) {
  console.log(`s[${value1}] = ${value2}`);
}

new Set(["foo", "bar", undefined]).forEach(logSetElements);

// Expected output: "s[foo] = foo"
// Expected output: "s[bar] = bar"
// Expected output: "s[undefined] = undefined"

語法

js
forEach(callbackFn)
forEach(callbackFn, thisArg)

引數

回撥

一個函式,用於執行集合中的每個條目。該函式會接收以下引數:

value

每次迭代的值。

key

每次迭代的鍵。這總是與 value 相同。

set

正在迭代的集合。

thisArg 可選

執行 callbackFn 時用作 this 的值。

返回值

無(undefined)。

描述

forEach() 方法會對 Set 物件中實際存在的每個值呼叫一次提供的 callback。對於已被刪除的值,它不會被呼叫。但是,對於存在但值為 undefined 的值,它會被執行。

callback 的呼叫會接收到 三個引數

  • 元素值
  • 元素鍵
  • 正在遍歷的 Set 物件

Set 物件沒有鍵,因此前兩個引數都是 Set 中包含的 。這是為了與 MapArray 的其他 forEach() 方法保持一致。

如果向 forEach() 提供了 thisArg 引數,它將在呼叫 callback 時作為其 this 值傳遞。否則,將傳遞 undefined 值作為其 this 值。最終 callback 可觀察到的 this 值根據 確定函式看到的 this 的常規規則 來確定。

每個值都會被訪問一次,除非在 forEach() 完成之前被刪除然後重新新增。callback 不會為在訪問之前被刪除的值呼叫。在 forEach() 完成之前新增的新值將會被訪問。

forEach()Set 物件中的每個元素執行一次 callback 函式;它不返回值。

示例

記錄 Set 物件的內容

下面的程式碼會為 Set 物件中的每個元素記錄一行內容

js
function logSetElements(value1, value2, set) {
  console.log(`s[${value1}] = ${value2}`);
}

new Set(["foo", "bar", undefined]).forEach(logSetElements);

// Logs:
// "s[foo] = foo"
// "s[bar] = bar"
// "s[undefined] = undefined"

規範

規範
ECMAScript® 2026 語言規範
# sec-set.prototype.foreach

瀏覽器相容性

另見