このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Map.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 2016年9月.
[Symbol.iterator]() はMap インスタンスのメソッドで、反復可能プロトコルを実装します。これにより、Map オブジェクトが反復可能プロトコルを受け入れるほとんどの構文、たとえばスプレッド構文やfor...of ループなどで使用できるようになります。マップのキーと値のペアを挿入順に返すイテレーターオブジェクトを返します。
初期値は、Map.prototype.entries メソッドの初期値と同じ関数オブジェクトです。
In this article
試してみましょう
const map = new Map();map.set("0", "foo");map.set(1, "bar");const iterator = map[Symbol.iterator]();for (const item of iterator) { console.log(item);}// 予想される結果: Array ["0", "foo"]// 予想される結果: Array [1, "bar"]構文
js
map[Symbol.iterator]()引数
なし。
返値
返値はMap.prototype.entries() と同じ、マップのキーと値のペアを生成する新しい反復可能なイテレーターオブジェクトを返します。
例
>for...of を使用した反復処理
このメソッドを直接呼び出す必要があることはめったにないことに注意してください。[Symbol.iterator]() メソッドが存在することでMap オブジェクトを反復可能にし、for...of ループなどの反復処理構文が、自動的にこのメソッドを呼び出してループのためのイテレーターを取得することができます。
js
const myMap = new Map();myMap.set("0", "foo");myMap.set(1, "bar");myMap.set({}, "baz");for (const entry of myMap) { console.log(entry);}// ["0", "foo"]// [1, "bar"]// [{}, "baz"]for (const [key, value] of myMap) { console.log(`${key}: ${value}`);}// 0: foo// 1: bar// [Object]: baz手動でイテレーターを手繰る
返されたイテレーターオブジェクトのnext() メソッドを手動で呼び出すと、反復処理を最大限に制御することができます。
js
const myMap = new Map();myMap.set("0", "foo");myMap.set(1, "bar");myMap.set({}, "baz");const mapIter = myMap[Symbol.iterator]();console.log(mapIter.next().value); // ["0", "foo"]console.log(mapIter.next().value); // [1, "bar"]console.log(mapIter.next().value); // [Object, "baz"]仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-map.prototype-%symbol.iterator%> |