Какие типы данных могут использоваться в качестве ключей Map и WeakMap, в чём различия?

WeakSet и WeakMap — это специальные коллекции в JavaScript, которые похожи на Set и Map, но с важными отличиями, связанными с управлением памятью и сборкой мусора.

Короткий ответ

Что ответить на собеседовании

WeakSet и WeakMap — это специальные коллекции в JavaScript, которые похожи на Set и Map, но с важными отличиями, связанными с управлением памятью и сборкой мусора.

Подробный разбор

Ответ с пояснениями

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

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку