ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript の WeakMap とは何ですか?

JavaScript の WeakMap とは何ですか?

WBOY
リリース: 2024-07-19 15:32:10
オリジナル
889 人が閲覧しました

What is a WeakMap in JavaScript?

WeakMap は、キーがオブジェクトであり、値が任意の値であるキーと値のペアのコレクションです。通常の Map とは異なり、WeakMap のキーは「弱参照」されます。これは、キー オブジェクトへの参照が他にない場合、そのオブジェクトをガベージ コレクションできることを意味し、メモリ リークの防止に役立ちます。

なぜWeakMapが必要なのでしょうか?

1. メモリ管理: 未使用のキーのガベージ コレクションを許可することで、効率的なメモリ使用を支援します。

2. プライベート データ: オブジェクト キーを持っていないとデータにアクセスできないため、オブジェクトのプライベート データを保存するために使用できます。

3. メモリ リークの回避: DOM 操作のような、DOM 要素が DOM から削除されるときにガベージ コレクションを妨げずに DOM 要素のメタデータを保存したい場合に特に役立ちます。

WeakMap はどのように使用するのでしょうか?

WeakMap は WeakMap コンストラクターを使用して作成されます。使用方法は次のとおりです:

  1. WeakMap の作成:

1

let weakMap = new WeakMap();

ログイン後にコピー
  1. 設定値:

1

2

let obj = {};

weakMap.set(obj, 'value associated with obj');

ログイン後にコピー
  1. 値の取得:

1

console.log(weakMap.get(obj)); // 'value associated with obj'

ログイン後にコピー
  1. 存在を確認しています:

1

console.log(weakMap.has(obj)); // true

ログイン後にコピー
  1. 値の削除:

1

2

weakMap.delete(obj);

console.log(weakMap.has(obj)); // false

ログイン後にコピー

面白い例

WeakMap を使用して、現在秘密の隠れ家にいるスーパーヒーローを追跡しましょう。秘密の隠れ家には、スーパーヒーローが中にいる限り、彼らに関する情報のみが保管されます。彼らが離れると、隠れ家はメモリの過負荷を避けるために彼らのことを忘れます。

例: スーパーヒーローの隠れ家

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

let secretHideout = new WeakMap();

 

function Superhero(name) {

    this.name = name;

}

 

// Superheroes enter the hideout

let batman = new Superhero('Batman');

let superman = new Superhero('Superman');

 

secretHideout.set(batman, 'Batcave');

secretHideout.set(superman, 'Fortress of Solitude');

 

console.log(secretHideout.get(batman)); // 'Batcave'

console.log(secretHideout.get(superman)); // 'Fortress of Solitude'

 

// Batman leaves the hideout

batman = null; // No more references to Batman

 

// After garbage collection, the hideout forgets about Batman

setTimeout(() => {

    console.log(secretHideout.get(batman)); // undefined (Batman has been garbage collected)

    console.log(secretHideout.has(superman)); // true (Superman is still in the hideout)

}, 1000);

ログイン後にコピー

この例では:

  • スーパーヒーローの作成: バットマンとスーパーマンはオブジェクトとして作成されます。
  • 隠れ家に入る: 彼らはそれぞれの隠れ家に入り、私たちはこの情報を WeakMap に保存します。
  • 隠れ家を出る: バットマンが隠れ家を離れると (つまり、バットマン = null)、バットマンへの参照はなくなります。ガベージ コレクションによりバットマンがメモリから削除されます。
  • 隠れ家の確認: タイムアウト後、隠れ家を確認します。バットマンは削除されました (ガベージコレクションが行われました) が、スーパーマンはまだそこにいます。

なぜこれは面白いのでしょうか?

あまりにも秘密すぎて、すぐに戻らないと誰が中にいたのかさえ忘れてしまう秘密の隠れ家を想像してみてください。この例のように、WeakMap はバットマンがいなくなるとバットマンのことを忘れ、隠れ家の記憶をクリーンかつ効率的に保ちます。

重要なポイント

キーはオブジェクトである必要があります: WeakMap ではオブジェクトのみをキーとして使用できます。
反復可能ではありません: WeakMap は反復可能ではないため、for-of のようなループでは使用できません。
ガベージ コレクション: 主な利点は、ガベージ コレクターがプログラム内の他の場所で参照されなくなったキーをクリーンアップして、メモリ リークを防止できることです。

これにより、WeakMap は、オブジェクトを不必要に存続させることを心配せずに、オブジェクトに関連する一時データを保存する必要がある場合に特に役立ちます。

以上がJavaScript の WeakMap とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート