図1に示すように、データ構造セットを記載しました
ES6は、新しいデータ構造のセットを提供します。これは、配列に類似しているが、メンバーの値は、重複する値が一意ではありません。
自分自身を設定した設定データ構造を生成するコンストラクタです。
typeofを設定 // 関数 typepf(新しいセット()) // オブジェクトの 新しい(セット)instanceofの設定 // 真 セット のinstanceof 関数 // 真
2、データ型の使用セットの基本的な構造
CONSTセット= 新しいセット() constの配列 = [1、3、3、2、4、2、5、0、1、5、0、4 ] array.forEach((X) => {set.add(X )}) にconsole.log(セット)
console.log(... SET) // 出力2 3 4 5 0 1 はconsole.log(Array.from(SET)) // 出力[1、3、2、4、5、0]
上記の特徴からわかるように、独自のサイズプロパティはのために...トラバーサルの独自の方法を持っていて、セットは構造体の配列の内部要素は、繰り返されることはありません...また、この機能を使用するには、それは簡単です。重複排除操作は、配列または文字列になります
CONSTアレイ= [1、2、3、4、4、3、2、1、0 ] CONSTセット = 新しいセット(アレイ) CONST ARR = Array.from(セット) CONST ARR2 = [...設定] // 字符串去重 のconst文字列 = 'abcddcba' constのSTR = [... 新しいセット(文字列)]。参加( '')
注:NaNのNaNが繰り返されたデータ構造に設定しますが、実際にはJSのNaN == NaNは、他のタイプのデータは、厳密に任意の二つ使用することができます===に従っていません!
2、プロパティとメソッドは、コンストラクタを設定します。
コンストラクタのプロトタイプconstructorプロパティがSet.prototype.constructor ===セットを持って上に設定
プロトタイプコンストラクタ上記のセットのメンバーの数を示すsize属性は、クラスが配列ArrayLike長プロパティで使用されていることに注意しました
それぞれ4つのコンストラクター操作法以上に設定
メンバーを追加します。Set.prototype.add(値)、メンバーを削除しますSet.prototype.delete(値)、それが持っているかどうか: Set.prototype.has(値)、空: Set.prototype.clear()、
CONSTアレイは= [1、2、3、4、5、6 ] CONSTセット = 新しいセット(アレイ) (set.add 7 ) はconsole.log(set.has( 7 )) // 真 セット。削除(7 ) はconsole.log(set.has( 7 )) // 偽 set.clear() はconsole.log(...セット) // 未定義
プロトタイプのコンストラクタセットを通過する4つの方法があります。
すべてのキーを取得します。Set.prototype.keys()は、すべての値を取得する:Set.prototype.values()、キー名と値の配列を取得する:Set.prototype.entries()、設定しトラバース:Set.prototype.forEach
constの配列= [ 'アップル'、 'グーグル'、 'アリ'、 'Baiduの'、 'Tecent' ] constのセット = 新しいセット(配列) はconsole.log(set.keys()) はconsole.log(set.values( )) はconsole.log(set.entries())
図から知ることができる、3つのトラバーサル方法、訪問者のためのオブジェクトのオブジェクトセットを横断する返され...ループの
以下のための{(set.keysの項目()しましょう) はconsole.log(アイテム) } // 输出アップルグーグルBaiduのアリTecent ため{(set.valuesの項目()しましょう) はconsole.log(アイテム) } // 输出アップルGoogleのアリBaiduのTecent ため{(せset.entries()の項目) はconsole.log(アイテム) } // 输出[ 'アップル'、 'アップル'] [ 'グーグル'、 'グーグル'] [ 'アリ'、 'アリ'] [' Baiduの」、 'Baiduの'] [ 'Tecent'、 'Tecent']
戻り値のない何かをする設定の各メンバーのために、コンストラクタメソッドのforEachがあるプロトタイプを設定します
CONSTセット= 新しいセット([1、2、3 ]) set.forEach((アイテム) => { にconsole.log(アイテム) }) // 1 2 3
3、WeakSet
セットは、値の重複設定されていない場合、同様の構造をWeakSet。しかし、それはセットで2つの違いがあります。
まず第一に、それだけでWeakSetオブジェクトのメンバーになることができますが、値の他のタイプにすることはできません。
第二に、オブジェクトは弱参照されているWeakSet、そのガベージコレクションは、オブジェクトがもはや他のオブジェクトから参照されている場合つまり、ガベージコレクションが自動的に占有物を再利用しない、オブジェクトへの参照WeakSetとはみなされませんメモリは関係なく、オブジェクトのもWeakSetに存在します。
それはいつでも消えてしまいますので、そのため上記の機能を、メンバーWeakSetは、適切な基準ではありません。また、原因内部WeakSetにガベージコレクションのメカニズムに応じて、会員数は、以前に実行されていないと実行の可能性がある後にメンバーの数は同じではありません、そして時にガベージコレクションメカニズムを実行するトラバースすることはできませんWeakSet予測できないので、ES6の規定です。
メンバーは弱参照であるため、WeakSetはいつでも消える可能性があり、トラバースすることができない、仕組みを横断のメンバーは、それだけで終わりを横断している可能性が、私たちはメンバーを取得していないという保証はありません。一つの使用WeakSetは、DOMノードを格納しているが、それはメモリリークにつながる、ドキュメントから削除これらのノードを心配しないでください。