JavaScript 中的 WeakSet 是一種特殊的集合,其中的物件具有「弱」引用。這意味著如果沒有其他對儲存在 WeakSet 中的物件的引用,則該物件可以被垃圾收集。與常規 Set 不同,WeakSet 只接受物件作為元素,而這些物件是弱保存的。這使得 WeakSet 對於您想要追蹤物件但又不想阻止它們在其他地方不再需要時被垃圾回收的情況非常有用。
1 僅限對象: WeakSet 只能包含對象,不能包含數字或字串等原始值。
2 弱引用: WeakSet 中對物件的引用是弱引用,這表示如果沒有其他物件引用,則該物件可以被垃圾回收。
3 無 Size 屬性: 您無法取得 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 中的弱集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!