Apakah WeakMap dalam JavaScript?

WBOY
Lepaskan: 2024-07-19 15:32:10
asal
863 orang telah melayarinya

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();
Salin selepas log masuk
  1. Menetapkan nilai:
let obj = {};
weakMap.set(obj, 'value associated with obj');
Salin selepas log masuk
  1. Mendapatkan nilai:
console.log(weakMap.get(obj)); // 'value associated with obj'
Salin selepas log masuk
  1. Menyemak kewujudan:
console.log(weakMap.has(obj)); // true
Salin selepas log masuk
  1. Memadamkan nilai:
weakMap.delete(obj);
console.log(weakMap.has(obj)); // false
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan