Symbol.iterator

Symbol.iterator は、オブジェクトのデフォルトのイテレーターを指定します。for...of によって使用されます。

説明

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

一部の組み込み型にはデフォルトの反復動作がありますが、他の型( Object など)にはありません。@@iterator メソッドの組み込み型は次のとおりです。

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

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

ユーザー定義の反復可能項目

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

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

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

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

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

[...new Foo] // [ 1, 2, 3 ]
[...someObj] // [ 'a', 'b' ]

非整形反復処理

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

var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

仕様

仕様書
ECMAScript (ECMA-262)
Symbol.iterator の定義

ブラウザー実装状況

BCD tables only load in the browser

関連情報