Что такое WeakSet и WeakMap, чем они отличаются от Set и Map?
Answer from AI
sobes.tech AI
WeakSet и WeakMap — это специальные коллекции в JavaScript, которые похожи на Set и Map, но с важными отличиями, связанными с управлением памятью и сборкой мусора.
Основные отличия:
-
Слабые ссылки: WeakSet и WeakMap хранят объекты слабыми ссылками. Это значит, что если объект, который находится в WeakSet или является ключом в WeakMap, больше нигде не используется, он может быть автоматически удалён сборщиком мусора.
-
Только объекты: В WeakSet и WeakMap ключами (или элементами) могут быть только объекты, примитивы использовать нельзя.
-
Отсутствие методов перебора: В WeakSet и WeakMap нет методов для перебора элементов (например, forEach, keys, values), потому что содержимое может изменяться асинхронно из-за сборки мусора.
-
Использование: WeakMap часто используется для хранения приватных данных, связанных с объектами, без риска утечки памяти.
Пример:
let wm = new WeakMap();
let obj = {};
wm.set(obj, 'данные');
obj = null; // теперь объект может быть удалён сборщиком мусора, и данные в WeakMap тоже исчезнут
В отличие от Map и Set, которые хранят сильные ссылки и предотвращают удаление объектов, WeakMap и WeakSet позволяют сборщику мусора освобождать память, если объекты больше не используются в других местах.