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 の定義

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
iteratorChrome 完全対応 43Edge 完全対応 12Firefox 完全対応 36IE 未対応 なしOpera 完全対応 30Safari 完全対応 10WebView Android 完全対応 43Chrome Android 完全対応 43Firefox Android 完全対応 36Opera Android 完全対応 30Safari iOS 完全対応 10Samsung Internet Android 完全対応 4.0nodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応

関連情報