WeakMap ialah koleksi pasangan nilai kunci di mana kuncinya adalah objek dan nilainya boleh menjadi nilai arbitrari. Tidak seperti Peta biasa, kunci dalam WeakMap "dirujuk dengan lemah." Ini bermakna jika tiada rujukan lain kepada objek utama, ia boleh menjadi sampah yang dikumpul, membantu mengelakkan kebocoran memori.
1. Pengurusan Memori: Membantu dalam penggunaan memori yang cekap dengan membenarkan pengumpulan sampah kunci yang tidak digunakan.
2. Data Peribadi: Boleh digunakan untuk menyimpan data peribadi untuk objek, kerana data tidak boleh diakses melainkan anda mempunyai kunci objek.
3. Mengelakkan Kebocoran Memori: Sangat berguna dalam senario seperti manipulasi DOM di mana anda mungkin mahu menyimpan metadata untuk elemen DOM tanpa menghalang pengumpulan sampah mereka apabila ia dialih keluar daripada DOM.
WeakMap dibuat menggunakan pembina WeakMap. Begini cara anda boleh menggunakannya:
let weakMap = new WeakMap();
let obj = {}; weakMap.set(obj, 'value associated with obj');
console.log(weakMap.get(obj)); // 'value associated with obj'
console.log(weakMap.has(obj)); // true
weakMap.delete(obj); console.log(weakMap.has(obj)); // false
Mari gunakan WeakMap untuk menjejak wira-wira yang sedang berada dalam persembunyian rahsia. Tempat persembunyian rahsia hanya menyimpan maklumat tentang wira-wira selagi mereka berada di dalam. Sebaik sahaja mereka pergi, tempat persembunyian melupakan mereka untuk mengelakkan kelebihan memori.
Contoh: Superhero Hideout
let secretHideout = new WeakMap(); function Superhero(name) { this.name = name; } // Superheroes enter the hideout let batman = new Superhero('Batman'); let superman = new Superhero('Superman'); secretHideout.set(batman, 'Batcave'); secretHideout.set(superman, 'Fortress of Solitude'); console.log(secretHideout.get(batman)); // 'Batcave' console.log(secretHideout.get(superman)); // 'Fortress of Solitude' // Batman leaves the hideout batman = null; // No more references to Batman // After garbage collection, the hideout forgets about Batman setTimeout(() => { console.log(secretHideout.get(batman)); // undefined (Batman has been garbage collected) console.log(secretHideout.has(superman)); // true (Superman is still in the hideout) }, 1000);
Dalam contoh ini:
Bayangkan tempat persembunyian rahsia yang sangat rahsia sehingga lupa siapa yang ada di dalamnya jika mereka tidak kembali segera! Sama seperti dalam contoh ini, WeakMap melupakan Batman sebaik sahaja dia pergi, memastikan ingatan tempat persembunyian itu bersih dan cekap.
Kunci mestilah objek: Anda hanya boleh menggunakan objek sebagai kunci dalam WeakMap.
Tidak boleh leter: WeakMap tidak boleh leter, jadi anda tidak boleh menggunakannya dengan gelung seperti for-of.
Pengumpulan sampah: Kelebihan utama ialah ia membolehkan pemungut sampah membersihkan kunci yang tidak lagi dirujuk di tempat lain dalam program, mengelakkan kebocoran memori.
Ini menjadikan WeakMap amat berguna untuk kes di mana anda perlu menyimpan data sementara yang berkaitan dengan objek tanpa perlu risau tentang memastikan objek tersebut hidup tanpa perlu.
Atas ialah kandungan terperinci Apakah WeakMap dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!