WeakSet dalam JavaScript ialah jenis set khas di mana objek di dalamnya mempunyai rujukan "lemah". Ini bermakna jika tiada rujukan lain kepada objek yang disimpan dalam WeakSet, objek itu boleh dikumpul sampah. Tidak seperti Set biasa, WeakSet hanya menerima objek sebagai elemen, dan objek tersebut dipegang dengan lemah. Ini menjadikan WeakSet berguna untuk kes di mana anda ingin menjejak objek tetapi tidak mahu menghalangnya daripada dikumpul sampah jika ia tidak lagi diperlukan di tempat lain.
1 Objek Sahaja: WeakSet hanya boleh mengandungi objek, bukan nilai primitif seperti nombor atau rentetan.
2 Rujukan Lemah: Rujukan kepada objek dalam WeakSet adalah lemah, bermakna jika tiada rujukan lain kepada objek, ia boleh menjadi sampah yang dikumpul.
3 Tiada Harta Saiz: Anda tidak boleh mendapatkan saiz WeakSet kerana ia tidak mendedahkan bilangan elemennya.
4. Tiada Lelaran: Anda tidak boleh lelaran pada WeakSet, kerana ia tidak mempunyai kaedah seperti forEach atau iterator seperti 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
Mari bayangkan senario di mana WeakSet adalah seperti kelab rahsia untuk pengintip. Kelab ini sangat berahsia, dan jika pengintip tidak lagi aktif, mereka akan lenyap tanpa jejak. Kelab tidak pernah mengira ahlinya, dan anda tidak boleh mendapatkan senarai orang yang berada dalam kelab itu. Anda hanya boleh bertanya sama ada pengintip tertentu berada dalam kelab.
// 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
Dalam contoh lucu ini, WeakSet ialah kelab pengintip rahsia, dan pengintip adalah objek. Apabila pengintip (objek) menyelesaikan misi mereka dan tiada rujukan lain kepada mereka, mereka hilang (mendapatkan sampah dikumpul) tanpa sebarang kesan, sama seperti cara objek dialih keluar daripada WeakSet apabila ia tidak lagi dirujuk di tempat lain dalam kod.
Atas ialah kandungan terperinci WeakSet dalam JS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!