WeakMap オブジェクトは、キーが弱参照であるキー/値のペアのコレクションです。キーはオブジェクトである必要がありますが、値は何でもかまいません。 文法新しい WeakMap([反復可能]) パラメータ反復可能 説明するWeakMap のキーは Object 型のみにすることができます。 プリミティブ データ型 (Symbol など) はキーとして使用できません。 なぜ WeakMap なのか?JavaScript では、4 つの API メソッドで 2 つの配列 (キー用と値用) を共有することでマップ API を実装できます。このようなマップに値を設定すると、キーと値の両方が両方の配列の末尾に追加されます。これにより、2 つの配列内のキーと値のインデックスが対応するようになります。マップから値を取得するときは、すべてのキーを走査し、インデックスを使用して、格納された値の配列から対応する値を取得する必要があります。 ただし、このような実装には 2 つの大きな欠点があります。まず、割り当て操作と検索操作の両方で、マッチングのために配列全体を走査する必要があるため、時間の計算量は O(n) (n はキーと値のペアの数) になります。もう 1 つの欠点は、配列には常に各キーと値への参照が含まれるため、メモリ リークが発生する可能性があることです。このような参照は、他の参照が存在しない場合でも、ガベージ コレクション アルゴリズムによる再利用を妨げます。 対照的に、ネイティブ WeakMap は各キー オブジェクトへの「弱参照」を保持します。つまり、他の参照が存在しない場合でもガベージ コレクションを正しく実行できます。ネイティブ WeakMap の構造は特殊かつ効果的であり、マッピングに使用されるキーはリサイクルされていない場合にのみ有効です。 この弱参照のため、WeakMap のキーは列挙可能ではありません (すべてのキーを指定する方法はありません)。キーが列挙可能な場合、そのリストはガベージ コレクションの対象となり、未定義の結果になります。したがって、このタイプのオブジェクトのキー値のリストが必要な場合は、マップを使用する必要があります。 基本的に、オブジェクトにデータを追加し、ガベージ コレクション メカニズムに干渉したくない場合は、WeakMap を使用できます。 財産
長さプロパティの値は 0 です。
WeakMap コンストラクターのプロトタイプ。 すべての WeakMap オブジェクトに属性を追加できます。 WeakMapインスタンスすべての WeakMap インスタンスは WeakMap.prototype から継承します。 財産WeakMap.プロトタイプ.コンストラクタ 方法
キーに関連付けられたオブジェクトを削除します。実行後、WeakMap.prototype.has(key) は false を返します。
キーに関連付けられたオブジェクトを返します。キーに関連付けられたオブジェクトがない場合、undefined を返します。
キーがオブジェクトに関連付けられているかどうかに基づいてブール値を返します。
WeakMap にキーに関連付けられたオブジェクトのセットを設定し、この WeakMap オブジェクトを返します。 例WeakMapの使用定数wm1 = 新しいWeakMap()、 wm2 = 新しい WeakMap()、 wm3 = 新しい WeakMap(); 定数o1 = {}, o2 = 関数(){}, o3 = ウィンドウ; wm1.set(o1, 37); wm1.set(o2, "azerty"); wm2.set(o1, o2); // 値はオブジェクトや関数など何でも構いません wm2.set(o3, undefined); wm2.set(wm1, wm2); // キーと値は任意のオブジェクト、別の WeakMap オブジェクトでもかまいません wm1.get(o2); // "azerty" wm2.get(o2); // undefined、wm2 にキー o2 はありません wm2.get(o3); // undefined、値は undefined です wm1.has(o2); // 真 wm2.has(o2); // 偽 wm2.has(o3); // true (値が未定義の場合でも) wm3.set(o1, 37); wm3.get(o1); // 37 wm1.has(o1); // 真 wm1.delete(o1); wm1.has(o1); // 偽 .clear() メソッドを持つ WeakMap クラスを実装するクラス ClearableWeakMap { コンストラクタ(init) { this._wm = 新しい WeakMap(init) } クリア() { this._wm = 新しい WeakMap() } 削除(k) { this._wm.delete(k) を返します } 取得(k) { this._wm.get(k) を返します } 持っている(k) { this._wm.has(k) を返す } セット(k, v) { this._wm.set(k, v) これを返す } } 仕様
上記は、JavaScript WeakMap の使い方の詳しい説明の詳しい内容です。JavaScript WeakMap の詳細については、123WORDPRESS.COM の他の関連記事にも注目してください。 以下もご興味があるかもしれません:
|
<<: HTTP および HTTP コラボレーション Web サーバー アクセス フロー図
>>: MySQL 5.7 スレーブノードからマルチスレッド マスター スレーブ レプリケーションを構成する方法の詳細な説明
目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...
使用状態useState は、関数コンポーネント内で呼び出すことで、コンポーネントに内部状態を追加し...
目次概要1. 依存性注入2. Angularの依存性注入フレームワーク概要依存性注入: デザインパタ...
Unix/Linux システムの nobody ユーザーとは何ですか? 1. Windows システ...
現在、多くの企業が割引コードを通じてプロモーションを行っています。今では、8桁の割引コードを実装して...
目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...
> MySQL 5.7 クラスタ マスターとスレーブをデプロイする (テストのみ)イメージバー...
目次1. vue-cli デフォルト プロジェクトを作成する (babel のみを含む) 2. 作成...
この記事の例では、双方向データバインディングを実装するためのVueの具体的なコードを参考までに共有し...
前提条件: Dockerはすでにインストールされています1. 画像を見つける(方法は2つあります) ...
HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...
この記事では ソースコードのオンラインプレビューとダウンロード今日のチュートリアルでは、円のホバー効...
序文データ中心のアプリケーションの場合、データベースの品質はプログラムのパフォーマンスに直接影響する...
目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...
1. インストールパッケージをダウンロードする- お使いのコンピュータシステムに応じて適切なバージョ...