@Ivanushka255

Почему WeakMap и WeakSet могут работать с 1 элементом, но не могут работать сразу со всей коллекцией данных?

Источник
Обе этих структуры данных не поддерживают методы и свойства, работающие со всем содержимым сразу или возвращающие информацию о размере коллекции. Возможны только операции на отдельном элементе коллекции.

Объясняется это тем, что..:
Движок может произвести очистку сразу или потом, или сделать это частично. По этой причине методы для доступа ко всем сразу ключам/значениям недоступны.

Мой вопрос: в чем собственно говоря разница? Что, если например, одного элемента, с которым разрешена работа, тоже нет, но алгоритм просто еще не дошел до его очистки? Например:
let weakMap = new WeakMap();
let obj = {};
weakMap.set(obj, 25);
obj = null;
weakMap.get(obj); //что если алгоритм очистки не запустился до этой строки, и все равно выведет элемент?

Получается, что ограниченная функциональность этих коллекций данных не может полностью обезопасить от "неожиданностей"? Я так понимаю?
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Именно чтобы избежать неопределённости «а сработал ли уже сборщик мусора?», у WeakMap отсутствуют методы перечисления его элементов.

В вашем коде нет смысла после удаления obj — чего ожидаете от weakMap(null)?

Использование может быть, как приводят пример, в хранении приватных данных объекта или скрытия его реализации.

Только сам объект, используя себя как известный ключ, может получить из weakMap какие-то припрятанные данные. Нет объекта — нет данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы