反復プロトコルは、反復可能プロトコルと反復子プロトコルの2つに分けられます。
反復可能なプロトコル
反復可能プロトコルとは何ですか?
JavaScriptオブジェクトが独自の反復動作を定義またはカスタマイズできるようにするプロトコルは、反復可能なプロトコルと呼ばれます。
反復可能プロトコルを実装したオブジェクトを反復可能オブジェクトと呼びます。
オブジェクトが反復可能かどうかを判断する方法は?
オブジェクトが反復可能であるのは、以下の2点を満たしている場合です:
- オブジェクトには@@iteratorというプロパティが必要で、これは定数Symbol.iteratorでアクセスできます。
- このプロパティは、イテレータ・プロトコルに準拠したオブジェクトのパラメータなし関数を返します。
Stringオブジェクトは反復可能なオブジェクトです。検証のためにStringオブジェクトを例にとってみましょう。
最初のステートメントでは、@@iteratorプロパティが文字列オブジェクトに存在することと、戻り値が関数であることを確認しています;
2番目から4番目のステートメントでは、この関数がイテレータ・プロトコルに準拠したオブジェクトを返すパラメータレス関数であることを確認しています。
イテラブル・プロトコルを実装するJS組み込みオブジェクトは何ですか?
上記のStringオブジェクトの他に、Array、TypedArray、Map、Setといった4つのJS組み込みオブジェクトがイテレート可能プロトコルを実装しています。
反復可能オブジェクトをパラメータとする型変換
多くの組み込みAPIは引数としてイテレート可能なオブジェクトを受け取ります:
第二に、3つのステートメントは、Setオブジェクトの作成は、より良い理解、パラメータが配列や文字列を渡されます。その後、反復オブジェクトを渡されたMapオブジェクトを作成し、どのようにそれを取得するために構築する必要がありますか?オブジェクトオブジェクトは、()エントリと呼ばれるメソッドを持って、エントリ()メソッドは、オブジェクトの独自の列挙可能な属性が与えられたキーと値のペアの配列を返します、単刀直入に言えば、反復可能なオブジェクトの上に渡されたMapオブジェクトの作成です。コードの検証
ステップ 1 と 2 は、Object.entries() メソッドが、上記のように Map オブジェクトが作成されたときに渡されたパラメー タと同じデータ構造を返すことを検証します。 ステップ 3 から 5 は、Object.entries() メソッドによって返されるオブジェクトが反復可能オブジェクトで あることを証明します。
ここまでで、配列と文字列のSetへの変換、オブジェクトのMapへの変換はマスターしました。また、イテレート可能なオブジェクトをパラメータとして受け付ける組み込みAPIは以下の通りです。
独自の反復可能オブジェクトの実装
反復可能オブジェクトの構文
いくつかの文は反復可能なオブジェクトに適用されます。ループ、展開構文、yield*、分解された代入などです。
イテレータ・プロトコル
イテレータ・プロトコルとは何ですか?
一連の値を生成する標準的な方法を定義したプロトコルをイテレータプロトコルと呼びます。値の数が有限である場合、すべての値が反復処理された後にデフォルトの戻り値が返されます。イテレータプロトコルを実装したオブジェクトをイテレータオブジェクトと呼びます。
反復子オブジェクトの特徴
イテレーター・オブジェクトには以下の2つの特徴があります:
- オブジェクトは、next() メソッドを持つメソッドを実装する必要があり、next() メソッドはパラメータなしのメソッドです。
- next() メソッドは、done と value という 2 つのプロパティを持つオブジェクトを返します。
反復子オブジェクトの例
単純なイテレータのコード例は以下の通りです:
疑似配列
最後に、「オブジェクト型変換ネットワーク」をより豊かで包括的なものにするために、擬似配列オブジェクトを「織り込む」つもりです。
擬似配列とは何ですか?
擬似配列はクラス配列とも呼ばれます。擬似配列のプロトタイプはオブジェクトです。配列と同じものを持つので、疑似配列と呼ばれます:
- length属性で
- 要素にはインデックスでアクセスできます。
配列との違いは何ですか?
配列が存在しないメソッド: pop や push などの配列メソッド。
配列の一般的なクラスは何ですか?
- 関数の引数オブジェクトの引数のリスト。
- DOM オブジェクトのリスト。
- jQuery
- inputファイル・オブジェクト FileList.
クラスの配列を配列に変換する方法は?
- ES6用に拡張された構文。 Write: [....arrayLike]です。
- 配列オブジェクトの組み込み from メソッド。 Write: Array.from(arrayLike);
オブジェクトがクラス配列オブジェクトかどうかを判断する方法は?
javascriptの決定版』には、オブジェクトが「クラスの配列」であるかどうかを判断するコードが掲載されています。その方法を紹介します:
クラス配列と反復可能オブジェクトの関連と違い
イテレート可能なオブジェクトと配列のようなオブジェクトは、本質的にまったく異なる2つの概念であり、その違いと関連性を以下に説明します。
連絡先
- イテレート可能なオブジェクトや配列のようなオブジェクトは、Array.fromを使って実際の配列に変換することができます。
- オブジェクトの中には、擬似配列と反復可能オブジェクトの両方を兼ねているものがあります。例えば、arguments オブジェクトは関数の引数のリストです。
区別:
- Iterableオブジェクト [Symbol.iterator]メソッドのプロパティを実装したオブジェクト。
- 配列のようなオブジェクト .length 属性を持つオブジェクト。
オブジェクト変換関係図
オブジェクト変換関係図
オブジェクト間の変換の例
反復プロトコルを使ったオブジェクト変換の簡単なコード例
地図へのオブジェクト
Object对象转Map 对象
Mepオブジェクトからセットオブジェクトへ
反復プロトコルに精通していれば、より柔軟なオブジェクト変換を行うことができます。
for......ofループ構文はES6が提供する構文で、このメソッドは反復可能なオブジェクト専用のループメソッドです。...of構文が使えます。 for...of構文はまさに構文の宝庫です。





