Size: a a a

2020 June 02

DE

Denis Efremov in pro.js
Александр Козлов
так, и что?
я делаю set объекта из массива, ключ будет объект, все же в порядке
И зачем?
источник

АК

Александр Козлов... in pro.js
Denis Efremov
И зачем?
так нужно, сверху прикрепил просто базовый пример, который не работает, хочу понять почему он не работает
источник

DE

Denis Efremov in pro.js
Александр Козлов
так нужно, сверху прикрепил просто базовый пример, который не работает, хочу понять почему он не работает
Зачем нужно?
источник

АК

Александр Козлов... in pro.js
Denis Efremov
Зачем нужно?
потому что здесь написано (https://learn.javascript.ru/set-map), что weakMap должен удалять внутри себя пару, когда ссылка на ключ перестанет существовать
источник

DE

Denis Efremov in pro.js
Александр Козлов
потому что здесь написано (https://learn.javascript.ru/set-map), что weakMap должен удалять внутри себя пару, когда ссылка на ключ перестанет существовать
Бред какой-то! С чего это вдруг?
источник

АК

Александр Козлов... in pro.js
Denis Efremov
Бред какой-то! С чего это вдруг?
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
WeakMaps имеют “weak” («слабые») обращения к ключам объекта, а следовательно непрепятствие сборщику мусора, когда мы больше не имеем объекта-ключа.
источник

DE

Denis Efremov in pro.js
А с чего ты решил, что он не удалился?
источник

АК

Александр Козлов... in pro.js
Denis Efremov
А с чего ты решил, что он не удалился?
Выполни код, который я прикрепил в самом начале
источник

АК

Александр Козлов... in pro.js
Александр Козлов
Всем привет, подскажите, пожалуйста, почему не работает WeakMap? Или я просто не понимаю как он должен работать?
let activeUsers = [
 {name: "Вася"},
 {name: "Петя"},
 {name: "Маша"}
];

let weakMap = new WeakMap();
let activeUserMap = new Map();

weakMap.set(activeUsers[0], 1);
weakMap.set(activeUsers[1], 2);
weakMap.set(activeUsers[2], 3);

activeUserMap.set(activeUsers[0], 1);
activeUserMap.set(activeUsers[1], 2);
activeUserMap.set(activeUsers[2], 3);

activeUsers.splice(0, 1);

console.log(weakMap);
console.log(activeUserMap);

Я думаю, что при удалении объекта из массива activeUsers этот элемент должен автоматически удалиться из weakMap, но этого не происходит
.
источник

DE

Denis Efremov in pro.js
Ну я выполняю
источник

DE

Denis Efremov in pro.js
И что?
источник

АК

Александр Козлов... in pro.js
Denis Efremov
И что?
Сколько элементов в weakMap? после исполнения
источник

DE

Denis Efremov in pro.js
Я не могу получить доступ к единице после удаления ссылки
источник

DE

Denis Efremov in pro.js
Александр Козлов
Сколько элементов в weakMap? после исполнения
2
источник

DE

Denis Efremov in pro.js
Ты не можешь посчитать кол-во элементов в WeakMap
источник

АК

Александр Козлов... in pro.js
у меня вот так показывает
источник

DE

Denis Efremov in pro.js
Это то что помнит о нем консоль
источник

DE

Denis Efremov in pro.js
Получи мне теперь 1
источник

DE

Denis Efremov in pro.js
weakMap.get([...activeUserMap.entries()][0][0])
источник

АК

Александр Козлов... in pro.js
Denis Efremov
Получи мне теперь 1
Внутри массива activeUsers теперь же нет "Вася" => но если я делаю  
weakMap.get({name: "Вася"});

то возвращается undefined
источник