Первый пример некорректный, как уже написали. (Но рабочий.)
{name: 'Ivan'}
И что это еще за объект такой?
Вот это я понимаю объект
new Uint8Array(100_000_000)
. Весомый.
Поспамь в консоль:
let weakMap = new WeakMap();
let obj = {a: new Uint8Array(100_000_000)};
weakMap.set({}, obj);
А теперь попробуй вместо
WeakMap
Map
.
А для наглядности можно еще один нолик добавить:
new Uint8Array(1_000_000_000)
.
Тестировать, например, тут:
https://vueuse.org/core/usememory/#demo
Так так тут счетчик памяти наглядно показывает удаление объектов.
И, кстати, перезапись переменной
let weakMap = new Map();
не поможет при таком спаме в консоль, т.к. если объект выведен в косколь, он так и будет висеть в памяти, пока консоль не будет очищена (
console.clear()
), либо страница перезагружена.
Второй пример корректный. Жать сюда:
К слову, аналогичный класс из Java —
WeakHashMap
.