он не удаляется из WeakSet. Почему это?
blockquote>Скорее всего потому, что сборщик мусора еще не запущен. Тем не менее, вы говорите, что используете Traceur, поэтому просто может быть, что они не поддерживаются должным образом. Интересно, как
console
может показать содержимоеWeakSet
в любом случае.В чем смысл добавлять объекты непосредственно к WeakSets?
blockquote>Нет смысла добавлять литералы объектов к
WeakSet
s.Что такое практическое использование WeakSet, если мы даже не можем его прокручивать или не получаем текущий размер?
< / blockquote>Все, что вы можете получить, это один бит информации: Является ли объект (или вообще, значение), содержащийся в наборе?
Это может быть полезно в ситуациях, когда вы хотите «пометить», объекты, фактически не изменяя их (устанавливая на них свойство). Многие алгоритмы содержат какое-то «если
x
уже было замечено» условие (возможно, обнаружение циклаJSON.stringify
может быть хорошим примером), а когда вы работаете с предоставленными пользователем значениями, используйтеSet
/WeakSet
было бы целесообразно. ПреимуществоWeakSet
здесь в том, что его содержимое может быть собрано в мусор, пока ваш алгоритм все еще работает, поэтому он помогает сократить потребление памяти (или даже предотвращает утечки), когда вы имеете дело с большим количеством данных, которые лениво (возможно даже асинхронно).