Rumah  >  Artikel  >  hujung hadapan web  >  Apakah WeakMap dalam JavaScript?

Apakah WeakMap dalam JavaScript?

WBOY
WBOYasal
2024-07-19 15:32:10793semak imbas

What is a WeakMap in JavaScript?

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.

Mengapa kita memerlukan WeakMap?

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.

Bagaimanakah kita menggunakan WeakMap?

WeakMap dibuat menggunakan pembina WeakMap. Begini cara anda boleh menggunakannya:

  1. Mencipta Peta Lemah:
let weakMap = new WeakMap();
  1. Menetapkan nilai:
let obj = {};
weakMap.set(obj, 'value associated with obj');
  1. Mendapatkan nilai:
console.log(weakMap.get(obj)); // 'value associated with obj'
  1. Menyemak kewujudan:
console.log(weakMap.has(obj)); // true
  1. Memadamkan nilai:
weakMap.delete(obj);
console.log(weakMap.has(obj)); // false

Contoh Lucu

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:

  • Mencipta Wira-wira: Batman dan Superman dicipta sebagai objek.
  • Memasuki Persembunyian: Mereka memasuki tempat persembunyian masing-masing dan kami menyimpan maklumat ini dalam WeakMap.
  • Meninggalkan Persembunyian: Apabila Batman meninggalkan tempat persembunyian (iaitu, batman = null), tiada lagi rujukan kepada Batman. Pengumpulan sampah akan mengeluarkan Batman daripada ingatan.
  • Menyemak Persembunyian: Selepas tamat masa, kami menyemak tempat persembunyian. Batman telah dialih keluar (sampah dikumpul), tetapi Superman masih ada.

Kenapa ini kelakar?

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.

Perkara Utama

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn