WEAKMAP EN JAVASCRIPT: QUÉ ES Y CÓMO UTILIZARLO

La clase WeakMap en javascript es una estructura de datos que permite asociar datos a objetos de manera que las claves (los objetos) no impiden que el recolector de basura los elimine si no tienen otras referencias. Es similar a la clase WeakMap de PHP, pero adaptado al entorno de JavaScript. Ejemplo:
// Crear un WeakMap
const weakMap = new WeakMap();

// Crear un objeto como clave
let key = { id: 1 };

// Asignar un valor al objeto en el WeakMap
weakMap.set(key, "Datos asociados");

// Mostrar el valor
console.log(weakMap.get(key)); // Salida: Datos asociados

// Eliminar la referencia al objeto
key = null; // El objeto ya no tiene referencias

// El WeakMap elimina automáticamente la entrada
// No hay forma directa de contar las entradas, pero el objeto será recolectado
console.log(weakMap.has(key)); // Salida: false (si el recolector de basura ya actuó)
Otro Ejemploi:

const weakMap = new WeakMap();

function addMetadata(element, data) {
  weakMap.set(element, data);
}

const button = document.createElement("button");
addMetadata(button, { clicks: 0 });

console.log(weakMap.get(button)); // Salida: { clicks: 0 }

// Si el elemento DOM es removido
button.remove(); // El navegador puede recolectar el elemento, y la entrada en el WeakMap se elimina automáticamente
  • Claves solo objetos: En la clase WeakMap, las claves deben ser objetos (o valores que puedan ser tratados como objetos, como funciones). No se pueden usar valores primitivos (como strings o números).
  • Liberación automática: Si el objeto usado como clave deja de tener referencias, el recolector de basura lo elimina, y la entrada correspondiente en el WeakMap también se elimina.
  • No iterable: A diferencia de un Map, la clase WeakMap no es iterable y no permite listar sus claves o valores, lo que protege la privacidad de los datos y evita interferencias con el recolector de basura.
  • Métodos principales
    • set(key, value): Asocia un valor a una clave.
    • get(key): Recupera el valor asociado a la clave.
    • has(key): Verifica si la clave existe en la case WeakMap.
    • delete(key): Elimina una entrada específica.