2.8イテレータとジェネレータは、データから項目を順に取り出して反復処理するために採り入れられた仕組みです。Generators」にもとづき、解説とコード例を大きく改めました。反復可能オブジェクト反復処理のふるまいが定められたオブジェクトを、反復可能(iterable)オブジェクトと呼びます。反復可能オブジェクトは、Symbol.iteratorプロパティを備えていなければなりません。Array、Map、Set、String、Int32Array、Uint32Arrayなどの組み込み型には、あらかじめSymbol.iteratorプロパティが与えられています。オブジェクトのSymbol.iterator関数が、反復処理する値をデータから順に返すのです。反復可能オブジェクトは、for...of文のループ構造で内部の値を繰り返し処理できます。そのループ処理の中で、Symbol.iteratorプロパティの関数が内部的に呼び出されるのです。文for..ofとfor..inの違い文for..inもfor..ofと同じく、配列を繰り返し処理できます。取り出す値が異なるのです。for..in文がオブジェクトのキー(インデックス)を得るのに対して、for..of文からはインデックスに納められた値が取り出されます。コンソール出力456*/for..of文で配列要素の値だけでなくインデックスも得たい場合には、Array.prototype.entries()メソッドと分割代入を用います。6*/ただし、Array.prototype.entries()メソッドを使うには、tsconfig.jsonでcompilerOptionsのtargetをes6にしなければなりません。"es6",}}for..in文は、オブジェクトからプロパティの識別子(キー)を順に取り出せます。for..of文で繰り返し処理できるのは、反復可能オブジェクトだけです。コンパイルエラーconsole.log(i);}*/反復可能オブジェクトには、たとえばSetオブジェクトがあります。Setは、一意の値が納められるオブジェクトです。値は、for..of文で取り出せます。繰り返し処理が内部的に呼び出すSymbol.iteratorプロパティにより、値が順に得られるのです。Setオブジェクトにコンストラクタやメソッドで加えた値は、for...in文では取り出せません。オブジェクトのプロパティとして与えたキー(識別子)は、for...inループで参照できます。5(es5)であっても、配列はfor...ofループで処理できます。コンパイルエラーなしconsole.log(num);}それは、配列についてはfor...of文が、forループでJavaScriptコードにコンパイルされるからです。2015(es6)にすると、反復可能オブジェクトとしてfor...of文で処理するようにコンパイルされます。