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