JavaScript の WeakSet は、内部のオブジェクトが「弱い」参照を持つ特別な種類のセットです。これは、WeakSet に格納されているオブジェクトへの参照が他にない場合、そのオブジェクトをガベージ コレクションできることを意味します。通常の Set とは異なり、WeakSet はオブジェクトを要素としてのみ受け入れ、それらのオブジェクトは弱く保持されます。これにより、WeakSet は、オブジェクトを追跡したいが、他の場所で不要になったオブジェクトがガベージ コレクションされるのを防ぎたくない場合に便利です。
1 オブジェクトのみ: WeakSet には、数値や文字列などのプリミティブ値ではなく、オブジェクトのみを含めることができます。
2 弱い参照: WeakSet 内のオブジェクトへの参照は弱いです。つまり、オブジェクトへの参照が他にない場合、そのオブジェクトはガベージ コレクションされる可能性があります。
3 サイズなしプロパティ: WeakSet は要素の数を公開しないため、WeakSet のサイズを取得できません。
4. 反復なし: WeakSet には forEach のようなメソッドや Set のような反復子がないため、反復することはできません。
let weakset = new WeakSet(); let obj1 = {name: "object1"}; let obj2 = {name: "object2"}; weakset.add(obj1); weakset.add(obj2); console.log(weakset.has(obj1)); // true console.log(weakset.has(obj2)); // true obj1 = null; // obj1 is eligible for garbage collection console.log(weakset.has(obj1)); // false
WeakSet がスパイのための秘密クラブのようなシナリオを想像してみましょう。このクラブは非常に秘密主義で、スパイが活動を停止すると、跡形もなく消えてしまいます。クラブは会員数を決して管理しておらず、現在クラブに誰がいるかのリストを入手することはできません。クラブに特定のスパイがいるかどうかのみを尋ねることができます。
// The Secret Spy Club class Spy { constructor(name) { this.name = name; } introduce() { console.log(`Hi, I am Agent ${this.name}`); } } let spy1 = new Spy("007"); let spy2 = new Spy("008"); let spyClub = new WeakSet(); // Adding spies to the secret club spyClub.add(spy1); spyClub.add(spy2); console.log(spyClub.has(spy1)); // true console.log(spyClub.has(spy2)); // true spy1.introduce(); // Hi, I am Agent 007 spy2.introduce(); // Hi, I am Agent 008 // Spy 007 finishes his mission and disappears spy1 = null; // Now Agent 007 is no longer in the club and is eligible for garbage collection // Let's see if spies are still in the club console.log(spyClub.has(spy1)); // false, because Agent 007 is no longer referenced console.log(spyClub.has(spy2)); // true, because Agent 008 is still active // Agent 008 finishes his mission too spy2 = null; // Now Agent 008 is also eligible for garbage collection // Checking club members again console.log(spyClub.has(spy2)); // false, no active spies left
この面白い例では、WeakSet は秘密スパイ クラブであり、スパイはオブジェクトです。スパイ (オブジェクト) が任務を完了し、他にそれらへの参照がなくなると、オブジェクトがコード内の他の場所で参照されなくなったときに WeakSet から削除されるのと同じように、痕跡もなく消えます (ガベージ コレクションが取得されます)。
以上がJSのWeakSet?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。