Symbol.iterator

よく知られた Symbol.iterator シンボルは、オブジェクトにおける既定のイテレーターを指定します。for...of によって使われます。

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

解説

(for..of ループの始まりのときのように) オブジェクトが反復される必要があるときはいつでも、@@iterator メソッドは引数なしで呼ばれます。返された iterator は反復される値を取得するために使用されます。

デフォルトの反復動作を持っている組み込み型もあれば、 (Object のような) 持っていない型もあります。@@iterator メソッドをもつ組み込み型は下記の通りです。:

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

ユーザー定義イテレーター

このように独自のイテレーターを作ることができます。:

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

非整形イテレーター

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

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

仕様書

仕様書 状態 備考
ECMAScript 2015 (6th Edition, ECMA-262)
Symbol.iterator の定義
標準 初回定義
ECMAScript Latest Draft (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 完全対応 ありSafari iOS 完全対応 10Samsung Internet Android 完全対応 4.0nodejs 完全対応 0.12

凡例

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

関連情報