首頁  >  文章  >  web前端  >  JS 中的弱集?

JS 中的弱集?

WBOY
WBOY原創
2024-07-19 19:27:52301瀏覽

WeakSet in JS?

JavaScript 中的 WeakSet 是一種特殊的集合,其中的物件具有「弱」引用。這意味著如果沒有其他對儲存在 WeakSet 中的物件的引用,則該物件可以被垃圾收集。與常規 Set 不同,WeakSet 只接受物件作為元素,而這些物件是弱保存的。這使得 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn