Symbol.iterator
試してみましょう
Symbol.iterator
は、オブジェクトのデフォルトのイテレーターを指定します。for...of
によって使用されます。
説明
オブジェクトを反復する必要がある場合(for..of
ループの開始時など)は常に、その @@iterator
メソッドが引数なしで呼び出され、返されたイテレーターを使用して反復される値が取得されます。
一部の組み込み型にはデフォルトの反復動作がありますが、他の型( Object
など)にはありません。@@iterator
メソッドの組み込み型は次のとおりです。
Array.prototype[@@iterator]()
TypedArray.prototype[@@iterator]()
String.prototype[@@iterator]()
Map.prototype[@@iterator]()
Set.prototype[@@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
仕様
ブラウザー実装状況
BCD tables only load in the browser