--- title: Symbol.iterator slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator tags: - ECMAScript 2015 - JavaScript - Property - Symbol translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator ---
Symbol.iterator
は、オブジェクトのデフォルトのイテレーターを指定します。for...of
によって使用されます。
オブジェクトを反復する必要がある場合(for..of
ループの開始時など)は常に、その @@iterator
メソッドが引数なしで呼び出され、返されたイテレーターを使用して反復される値が取得されます。
一部の組み込み型にはデフォルトの反復動作がありますが、他の型( {{jsxref("Object")}} など)にはありません。@@iterator
メソッドの組み込み型は次のとおりです。
詳細については、反復処理プロトコルも参照してください。
{{js_property_attributes(0,0,0)}}
次のように独自の反復可能オブジェクトを作成できます。
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
仕様書 |
---|
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}} |
{{Compat("javascript.builtins.Symbol.iterator")}}