Además de Set y Map, JavaScript tiene dos primos hermanos con un comportamiento especial: WeakSet y WeakMap. La palabra clave aquí es weak (débil), y tiene que ver con la memoria.
NotaEn un
WeakMapy unWeakSetlas referencias a los objetos guardados son débiles: si no queda ninguna otra referencia a ese objeto, el recolector de basura puede eliminarlo, y desaparecerá también de la colección.
JavaScript libera automáticamente la memoria de los valores que ya no se usan en ningún sitio. A ese proceso lo llamamos garbage collection (recolección de basura).
El problema es que un Map o un Set normales mantienen vivas las referencias que guardan. Aunque borres el objeto de todas las demás partes de tu código, mientras esté dentro del Map, no se liberará:
let usuario = { name: 'Dani' }
const datos = new Map()
datos.set(usuario, 'info importante')
usuario = null // ya no lo uso en ningún otro sitio...
// pero el Map SIGUE manteniendo el objeto vivo en memoria
Un WeakMap resuelve ese problema: si el objeto que usas como clave deja de tener otras referencias, se elimina automáticamente de la memoria y del WeakMap.
let usuario = { name: 'Dani' }
const datos = new WeakMap()
datos.set(usuario, 'info importante')
usuario = null
// ahora el objeto puede ser liberado por el recolector de basura
// y su entrada desaparecerá del WeakMap
A cambio de esa magia, un WeakMap tiene reglas estrictas:
string, ni number...).for...of, ni usar .keys(), .values() o .size..set(), .get(), .has() y .delete().const wm = new WeakMap()
wm.set('texto', 1) // ❌ TypeError: la clave debe ser un objeto
Un WeakSet es la versión débil de Set: una colección de objetos únicos cuyas referencias no impiden que se liberen de memoria.
const visitados = new WeakSet()
let nodo = { id: 1 }
visitados.add(nodo)
console.log(visitados.has(nodo)) // true
nodo = null
// el objeto podrá ser recolectado y saldrá del WeakSet
Igual que el WeakMap, solo admite objetos, no es iterable y solo ofrece .add(), .has() y .delete().
La verdad es que en el día a día los usarás poco. Son útiles en casos muy concretos:
NotaNo te agobies si ahora mismo no encuentras dónde usarlos. Lo importante es saber que existen y entender la idea: referencias débiles que no impiden la recolección de basura. Para casi todo lo demás,
SetyMapson tu opción.
¡Y con esto cierras la sección de Sets y Maps! 🎉