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.

[Symbol.iterator]()Set インスタンスのメソッドで、反復処理プロトコルを実装しており、 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.

関連情報