この記事は編集レビューを必要としています。ぜひご協力ください。
この翻訳は不完全です。英語から この記事を翻訳 してください。
これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。
よく知られたSymbol.iteratorシンボルはオブジェクトに対するデフォルトイテレータを指定します。for...ofによって使われます。
Property attributes of Symbol.iterator |
|
|---|---|
| 書込可能 | false |
| enumerable | false |
| 設定可能 | false |
説明
(for..ofループの始まりのときのように)オブジェクトが反復される必要があるときはいつでも、@@iterator メソッドは引数なしで呼ばれます。返されたiteratorは反復される値を取得するために使用されます。
デフォルトの反復動作を持っている組み込み型もあれば、(Objectのような)持っていない型もあります。@@iteratorメソッドをもつ組み込み型は下記の通りです。:
Array.prototype[@@iterator]()TypedArray.prototype[@@iterator]()String.prototype[@@iterator]()Map.prototype[@@iterator]()Set.prototype[@@iterator]()
詳細については、 Iteration protocolsも確かめて下さい。
例
ユーザ定義イテレータ
このように独自のイテレータを作ることができます。:
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) The definition of 'Symbol.iterator' in that specification. |
Standard | Initial definition. |
ブラウザ実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | 未サポート | 36 (36) | 未サポート | 未サポート | 未サポート |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| 基本サポート | 未サポート | 未サポート | 36.0 (36) | 未サポート | 未サポート | 未サポート |