Из на той же странице, раздел «Почему слабая карта?» :
Опытный программист JavaScript заметит, что этот API может быть реализован в JavaScript с двумя массивы (один для ключей, один для значений), разделяемый четырьмя API-методами. Такая реализация будет иметь два основных неудобства. Первый - это поиск O (n) (n - количество ключей на карте). Второй - проблема утечки памяти. С помощью вручную написанных карт массив ключей будет содержать ссылки на ключевые объекты, не позволяя им собирать мусор. В native WeakMaps ссылки на ключевые объекты хранятся «слабо», что означает, что они не предотвращают сбор мусора, если не будет никакой другой ссылки на объект.
Из-за того, что ссылки являются слабых, ключи WeakMap не перечислимы (т. е. нет метода, предоставляющего вам список ключей). Если они были, список будет зависеть от состояния сбора мусора, введя недетерминизм.
blockquote>[И поэтому у них также нет свойства
size
]Если вы хотите иметь список ключей, вы должны сохранить его самостоятельно. Существует также предложение ECMAScript с целью введения простых множеств и карт, которые не будут использовать слабые ссылки и будут перечислимы.
blockquote>- это будет "normal"
Map
s . Не упомянутые в MDN, но в соглашении гармонии , у них также естьitems
,keys
иvalues
методы генератора и реализуют интерфейсIterator
.