Фундаментальное различие заключается в том, как каждая структура хранит ссылки на свои ключи. Map и Set поддерживают сильные ссылки, препятствуя сборке мусора для хранимых объектов. WeakMap и WeakSet поддерживают слабые ссылки — если больше нет других ссылок на объект-ключ, сборщик мусора может автоматически его освободить.
sizeclear()Эти ограничения существуют потому, что сборщик мусора может удалить записи в любой момент, что делает итерацию ненадёжной.
Используй Map и Set, когда тебе нужны:
forEach, for...of или spread.sizeconst userRoles = new Map();
userRoles.set("alice", "admin");
Используй WeakMap и WeakSet, когда ты хочешь привязать метаданные к объектам, не мешая сборке мусора:
const cache = new WeakMap();
function process(obj) {
if (!cache.has(obj)) cache.set(obj, compute(obj));
return cache.get(obj);
}
Предпочитай Map/Set для хранения данных общего назначения. Предпочитай WeakMap/WeakSet, когда твои данные должны жить ровно столько, сколько живёт сам объект, — тогда JavaScript сможет автоматически их очистить.
WeakMap и WeakSet позволяют использовать примитивные значения, такие как строки и числа, в качестве ключей, но только если они обёрнуты в объекты.
Новый — ещё не проверен сообществом
Вы