Sobes.tech
Back to questions
Middle+
4

Что такое WeakSet и WeakMap, чем они отличаются от Set и Map?

Companies where asked
М.Видео/эльдорадо

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 позволяют сборщику мусора освобождать память, если объекты больше не используются в других местах.