Set.prototype[@@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.

[@@iterator]()Set インスタンスのメソッドで、反復処理プロトコルを実装しており、 Set オブジェクトを、反復可能オブジェクトを期待するほとんどの構文、例えばスプレッド構文for...of ループなどで利用できるようにします。これは、挿入順に集合の値を返す集合イテレーターオブジェクトを返します。

@@iterator プロパティの初期値は Set.prototype.values プロパティの初期値と同じ関数オブジェクトです。

試してみましょう

構文

js
set[Symbol.iterator]()

引数

なし。

返値

Set.prototype.values() と同じく、値の集合を生成する新しい反復可能なイテレーターオブジェクトを返します。

for...of ループを使用した反復処理

このメソッドを直接呼び出す必要はほとんどないことに注意してください。@@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); // Object

仕様書

Specification
ECMAScript Language Specification
# sec-set.prototype-@@iterator

ブラウザーの互換性

BCD tables only load in the browser

関連情報