WeakMap と WeakSet は Map と Set に似ていますが、メモリ管理に関連する重要な違いがあります。 WeakMap と WeakSet はどちらもオブジェクトの保存を可能にしますが、キーや値が他の場所で参照されなくなった場合のガベージ コレクションを妨げることはありません。これは、オブジェクトに関するメタデータを保存する必要があるが、ストレージにそれらのオブジェクトを不必要に存続させたくない場合に役立ちます。
WeakMap は、キーと値のペアのコレクションです。キーはオブジェクトである必要があります、値は任意のデータ型にすることができます。 WeakMap の主な特徴は、キーへの参照が他にない場合でもキーのガベージ コレクションが妨げられないことです。
WeakMap コンストラクターを使用して、キーと値のペアの配列を渡して WeakMap を作成できます。
const weakMap = new WeakMap();
set() メソッドを使用してエントリを追加します。
const weakMap = new WeakMap();
const obj = {}; const weakMap = new WeakMap(); weakMap.set(obj, 'This is a weak map entry'); console.log(weakMap.get(obj)); // Output: 'This is a weak map entry'
WeakSet は Set に似ていますが、オブジェクト を値として保存することのみが可能であり、その要素の自動ガベージ コレクションも可能ですセットに格納されているオブジェクトへの参照がない場合。
WeakSet コンストラクターを使用して WeakSet を作成できます。
const obj1 = {}; const obj2 = {}; const weakMap = new WeakMap(); weakMap.set(obj1, 'value1'); weakMap.set(obj2, 'value2'); console.log(weakMap.get(obj1)); // Output: 'value1' console.log(weakMap.has(obj2)); // Output: true weakMap.delete(obj1); console.log(weakMap.has(obj1)); // Output: false
add() メソッドを使用してエントリを追加します。
const weakMap = new WeakMap();
const obj = {}; const weakMap = new WeakMap(); weakMap.set(obj, 'This is a weak map entry'); console.log(weakMap.get(obj)); // Output: 'This is a weak map entry'
Feature | WeakMap | WeakSet | Map | Set |
---|---|---|---|---|
Key/Value Types | Keys must be objects, values can be any type | Values must be objects | Keys and values can be any type | Values must be unique, any type |
Garbage Collection | Automatically garbage-collected when no references to the key | Automatically garbage-collected when no references to the value | Does not remove entries unless manually deleted | Does not remove entries unless manually deleted |
Iterability | Not iterable | Not iterable | Iterable (can loop through entries) | Iterable (can loop through values) |
Methods | set(), get(), has(), delete() | add(), has(), delete() | set(), get(), has(), delete() | add(), has(), delete() |
WeakMap の使用例:
WeakSet の使用例:
こんにちは、アバイ・シン・カタヤットです!
私はフロントエンドとバックエンドの両方のテクノロジーの専門知識を持つフルスタック開発者です。私はさまざまなプログラミング言語やフレームワークを使用して、効率的でスケーラブルでユーザーフレンドリーなアプリケーションを構築しています。
ビジネス用メールアドレス kaashshorts28@gmail.com までお気軽にご連絡ください。
以上がJavaScript で WeakMap と WeakSet をマスターする: 効率的なメモリ管理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。