Set.prototype[Symbol.iterator]()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Set 实例的 [Symbol.iterator]() 方法实现了可迭代协议以允许 Set 对象被大多数期望可迭代对象的语法所使用,例如展开语法for...of 循环。它返回一个集合迭代器对象,它会以插入顺序生成集合的值。

该属性的初始值与 Set.prototype.values() 属性的初始值是同一个函数对象。

尝试一下

const set1 = new Set();

set1.add(42);
set1.add("forty two");

const iterator1 = set1[Symbol.iterator]();

console.log(iterator1.next().value);
// Expected output: 42

console.log(iterator1.next().value);
// Expected output: "forty two"

语法

js
set[Symbol.iterator]()

参数

无。

返回值

Set.prototype.values() 返回值相同:一个新的可迭代迭代器对象,它会以插入顺序生成集合的值。

示例

使用 for...of 循环进行迭代

请注意,通常你不需要直接调用此方法。[Symbol.iterator]() 方法的存在使得 Set 对象可迭代,而像 for...of 循环这样的迭代语法会自动调用此方法以获取用于循环的迭代器。

js
const mySet = new Set();
mySet.add("0");
mySet.add(1);
mySet.add({});

for (const v of mySet) {
  console.log(v);
}

手动控制迭代器

你仍然可以手动调用返回的迭代器对象的 next() 方法来获得最大程度的控制权。

js
const mySet = new Set();
mySet.add("0");
mySet.add(1);
mySet.add({});

const setIter = mySet[Symbol.iterator]();

console.log(setIter.next().value); // "0"
console.log(setIter.next().value); // 1
console.log(setIter.next().value); // {}

规范

Specification
ECMAScript® 2025 Language Specification
# sec-set.prototype-%symbol.iterator%

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.iterator]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Uses a non-standard name.
Has more compatibility info.

参见