
Sederhananya, jika suatu variabel atau objek “unreachable”, maka variabel atau objek tersebut tidak perlu terus disimpan di memori dan harus didaur ulang.
Misalnya:
let xiaoming = {name:'xiaoming'}//Buat sebuah objek dan gunakan variabel xiaoming sebagai referensi xiaoming = null //Kosongkan variabel xiaoming, sehingga objek {name:'xiaoming'} tidak dapat dijangkau//{ name:'xiaoming'} Objek didaur ulang Jika suatu objek direferensikan oleh array dan objek lain, selama array dan objek yang mereferensikannya ada dalam array, maka objek tersebut dianggap dapat dijangkau.
Objek dalam array:
let xiaoming = {name:'xiaoming'}
biarkan arr = [xiaoming]
xiaoming = null //Kosongkan variabel xiaoming //Objek {name:'xiaoming'} tidak akan dilepaskan karena ada dalam array. Demikian pula, jika kita menggunakan objek sebagai kunci dari Map , jika Map ada , maka benda tersebut tidak akan didaur ulang oleh mesin.
Objek utama dalam Map :
let xiaoming = {name:'xiaoming'}
biarkan peta = Peta baru()
map.set(xiaoming,'anak laki-laki')
xiaoming = null //Kosongkan variabel xiaoming //Objek {name:'xiaoming'} tidak akan dilepaskan karena merupakan kunci dari peta. WeapMap pada dasarnya berbeda dari Map dalam proses pelepasan objek kunci Sederhananya, WeapMap tidak akan mencegah pengumpulan sampah karena objek sebagai kuncinya.
Perbedaan WeakMap dan Map dapat dibagi menjadi tiga aspek:
WeakMap hanya dapat menggunakan objek sebagai kuncinyaletweakMap = new WeakMap()
biarkan obj = {nama:'obj'}
lemahMap.set(obj,'obj sebagai kuncinya')
lemahMap.set('str','str as the key')//Hasil eksekusi kode error sebagai berikut:

Terlihat ketika kita menggunakan string sebagai key , program tidak dapat dijalankan secara normal.
Dengan kata lain, jika suatu objek tidak memiliki referensi lain kecuali referensi WeakMap , maka objek tersebut akan didaur ulang oleh sistem.
Misalnya:
biarkan WeakMap = new WeakMap()
biarkan obj = {nama:'obj'}
lemahMap.set(obj,'obj sebagai kuncinya')
obj = null //Buat variabel obj kosong //Saat ini, objek {name:'obj'} akan didaur ulang WeakMap mendukung metode terbatasWeakMap tidak mendukung iterasiWeakMap tidak mendukung keys()WeakMap tidak mendukung values()WeakMap tidak Mendukung entires(), jadi kami tidak memiliki cara untuk mendapatkan semua pasangan nilai kunci.
WeakMap hanya dapat menggunakan metode berikut:
weakMap.get(key) Dapatkan pasangan nilai kunciweakMap.set(key,val) Tetapkan pasangan nilai kunciweakMap.delete(key) Hapus pasangan nilai kunciweakMap.has(key) Tentukan apakah ituada Metode akses data WeakMap harus dibatasi karena waktu pelepasan objek oleh mesin JavaScript tidak dapat ditentukan.
Ketika sebuah objek kehilangan semua referensinya, mesin JavaScript mungkin akan segera melepaskan ruang yang ditempati oleh objek tersebut, atau mungkin menunggu beberapa saat.
Oleh karena itu, pada saat tertentu, jumlah elemen WeakMap tidak dapat ditentukan. (Bayangkan, jika kita melintasi elemen WeakMap setelah suatu objek kehilangan semua referensinya, kita mungkin mendapatkan hasil yang berbeda.)
Skenario penerapan WeakMap biasanya untuk menyimpan data yang "milik" suatu objek Saat ini, data "milik" objek ini juga harus dirilis.
Ada sebuah cerita sejarah yang sangat cocok untuk menggunakan WeakMap`: "Kelinci yang licik mati, antek-anteknya matang; burung-burung hilang, dan busur yang baik disembunyikan."
Jika kita menggambarkan cerita ini dalam kode JavaScript , kita harus menggunakan WeakMap :
letweakMap = new WeakMap()
let Rabbit = {name:'rabbit'} //Kelinci yang licik let runDog = {name:'runDog'} //Anjing yang berlari let flyBird = {name:'flyBird'} //Burung yang terbang let goodBow = {name :'goodBow'} //Liang Gong lemahMap.set(kelinci,runDog)
lemahMap.set(flyBird,goodBow)
kelinci = null //Kelinci yang licik mati flyBird = null //Burung-burung telah pergi//Sebentar lagi, para antek dan busur yang baik akan dilepaskan, mungkin tidak segera //Kisah ini memberitahu kita bahwa tidak ada akhir yang baik untuk menjadi seorang antek, mungkin tidak langsung Dibunuh oleh //, tetapi cepat atau lambat akan dimatikan. Dibandingkan dengan Set, Set WeakSet berikut:
WeakSet hanya dapat menambahkan elemen objekWeakSet add()WeakSet mencegah sistem mendaur ulang elemen.add() , has() , delete()WeakSet tidak mendukung atribut size dan metode keys() .WeakMap dapat menggunakan WeakMap untuk memverifikasi beberapa informasi keberadaan, atau memverifikasi status seperti "ya/tidak". untuk menentukan apakah pengguna sedang online:
let onlineUser = new WeakMap()
biarkan zhangSan = {nama:'Zhang San'}
biarkan liSi = {nama:'李思'}
biarkan wangEr = {nama:'王二'}
biarkan maZi = {nama:'Mazi'}
fungsi login(pengguna){
... ...
onlineUser.add(pengguna)
}
//Tentukan apakah pengguna sedang online fungsi isOnline(pengguna){
kembali onlineUser.has(pengguna)
} Keterbatasan WeakMap dan WeakSet adalah mereka tidak dapat melakukan iterasi dan mendapatkan semua elemen sekaligus, sehingga tidak mempengaruhi peran pentingnya di tempat yang sangat kritis.
WeakMap hanya dapat menggunakan objek sebagai kunci. Ketika semua referensi eksternal ke kunci hilang (tidak ada variabel lain kecuali WeakMap yang merujuk ke objek kunci), WeakMap tidak akan mencegah mesin mendaur ulang nilai kunci. Setelah didaur ulang, elemen WeakMap yang terkait tidak ada lagi.WeakSet hanya dapat menyimpan objek. Setelah elemen objek kehilangan semua referensi eksternal (kecuali WeakSet , tidak ada variabel lain yang merujuk ke objek elemen), WeakSet tidak akan mencegah mesin mendaur ulang elemen tersebut. Setelah didaur ulang, elemen terkait di WeakSet menghilang.clear() , size , keys() , values() tidak didukung. WeakMap dan WeakSet sering digunakan untuk menyimpan struktur data yang terkait dengan objek "utama". struktur data terkait dihapus secara alami.