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

浏览器兼容性

另见