このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Array.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]() はArray インスタンスのメソッドで、反復可能プロトコルを実装しており、スプレッド構文やfor...of ループのような反復可能オブジェクトを期待するほとんどの構文で配列を利用することができます。配列の各インデックスの値を返す配列イテレーターオブジェクトを返します。
このプロパティの初期値はArray.prototype.values プロパティの初期値と同じ関数オブジェクトです。
In this article
試してみましょう
const array = ["a", "b", "c"];const iterator = array[Symbol.iterator]();for (const value of iterator) { console.log(value);}// 予想される結果: "a"// 予想される結果: "b"// 予想される結果: "c"構文
array[Symbol.iterator]()引数
なし。
返値
Array.prototype.values() の返値と同じです。これは配列内のすべてのインデックスの値を生成する新しい反復可能イテレーターオブジェクトです。
例
>for...of ループを用いた反復処理
このメソッドを直接呼び出す必要はほとんどないことに注意してください。[Symbol.iterator]() メソッドが存在することで、配列を反復処理可能にすることができ、for...of ループのような反復処理構文では、自動的にこのメソッドを呼び出して、ループするイテレーターを取得します。
HTML
<ul></ul>JavaScript
const arr = ["a", "b", "c"];const letterResult = document.getElementById("letterResult");for (const letter of arr) { const li = document.createElement("li"); li.textContent = letter; letterResult.appendChild(li);}結果
イテレーターを手動で手繰る
返されたイテレーターオブジェクトのnext() メソッドを手動で呼び出すことで、反復処理を最大限に制御することもできます。
const arr = ["a", "b", "c", "d", "e"];const arrIter = arr[Symbol.iterator]();console.log(arrIter.next().value); // aconsole.log(arrIter.next().value); // bconsole.log(arrIter.next().value); // cconsole.log(arrIter.next().value); // dconsole.log(arrIter.next().value); // e文字列と文字列配列を同じ関数で処理
文字列と配列はどちらもイテレータープロトコルを実装しているので、汎用関数は両方の入力を同じ方法で処理するように設計することができます。これは、Array.prototype.values() を直接呼び出すよりも優れており、入力が配列であるか、少なくともそのようなメソッドを持つオブジェクトであることを要求されます。
function logIterable(it) { if (typeof it[Symbol.iterator] !== "function") { console.log(it, "is not iterable."); return; } for (const letter of it) { console.log(letter); }}// ArraylogIterable(["a", "b", "c"]);// a// b// c// StringlogIterable("abc");// a// b// c// NumberlogIterable(123);// 123 is not iterable.仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype-%symbol.iterator%> |