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 September 2015.

Symbol.iterator は静的データプロパティで、ウェルノウンシンボルである Symbol.iterator を表します。反復可能プロトコルは、オブジェクトのイテレーターを返すメソッドを、このシンボルで探します。オブジェクトが反復可能であるためには、[Symbol.iterator] キーを持っていなければなりません。

試してみましょう

const iterable1 = {};

iterable1[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

console.log([...iterable1]);
// Expected output: Array [1, 2, 3]

ウェルノウンシンボル Symbol.iterator です。

Symbol.iterator のプロパティ属性
書込可能不可
列挙可能不可
設定可能不可

解説

オブジェクトを反復処理する必要がある場合(for..of ループの開始時など)は、その [Symbol.iterator]() メソッドが引数なしで呼び出され、返されたイテレーターを使用して反復処理される値が取得されます。

一部の組み込み型には既定の反復動作がありますが、他の型(Object など)にはありません。[Symbol.iterator]() メソッドの組み込み型は次のとおりです。

詳細については、反復処理プロトコルも参照してください。

ユーザー定義の反復可能オブジェクト

次のように独自の反復可能オブジェクトを作成できます。

js
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};
[...myIterable]; // [1, 2, 3]

または、計算プロパティを使用して、クラスやオブジェクト内で反復可能オブジェクトを直接定義できます。

js
class Foo {
  *[Symbol.iterator]() {
    yield 1;
    yield 2;
    yield 3;
  }
}

const someObj = {
  *[Symbol.iterator]() {
    yield "a";
    yield "b";
  },
};

console.log(...new Foo()); // 1, 2, 3
console.log(...someObj); // 'a', 'b'

非整形反復処理

もし反復可能項目の [Symbol.iterator]() メソッドがイテレーターオブジェクトを返さない場合、それは非整形反復可能項目です。それを使用すると、実行時に例外が発生したり、バグが発生したりする可能性があります。

js
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-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
iterator

Legend

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

Full support
Full support

関連情報