Для чего используется WeakMap?
Массивы и структуры данных
`WeakMap` используют для приватных данных объектов и кеша/метаданных, привязанных к объектам, которые должны автоматически очищаться сборщиком мусора, когда объект больше не нужен.
Главная особенность
Ключами могут быть только объекты (и с ES2023 — незарегистрированные символы), и ссылки на них слабые — не мешают сборке мусора. Когда на объект-ключ больше нет других ссылок, запись из WeakMap удаляется автоматически:
let obj = {};
const wm = new WeakMap();
wm.set(obj, 'данные');
obj = null; // объект и запись в WeakMap собираются GCПрименения
Приватные данные объектов
Хранить данные экземпляра без утечек:
const privateData = new WeakMap();
class User {
constructor(name) {
privateData.set(this, { name });
}
getName() {
return privateData.get(this).name;
}
}Кеш/мемоизация по объекту
Кеш, привязанный к объекту; чистится при сборке объекта:
const cache = new WeakMap();
function compute(obj) {
if (!cache.has(obj)) cache.set(obj, expensive(obj));
return cache.get(obj);
}Метаданные для DOM-узлов
Данные, связанные с элементами, без утечек при удалении узла.
Ограничения
Не итерируется, нет size, только get/set/has/delete — из-за слабых ссылок содержимое может исчезнуть в любой момент.
Коротко для собеседования
WeakMap используют для приватных данных объектов, кеша/мемоизации по объекту-ключу и метаданных DOM-узлов — со слабыми ссылками, которые не мешают сборке мусора (запись удаляется, когда объект-ключ собран). Не итерируется, нет size. Предотвращает утечки памяти при привязке данных к объектам.