Предполагается, что WeakSet сохраняет элементы по слабой ссылке. То есть, если объект не ссылается ни на что другое, его следует очистить от WeakSet.
Я написал следующий тест:
var weakset = new WeakSet(),
numbers = [1, 2, 3];
weakset.add(numbers);
weakset.add({name: "Charlie"});
console.log(weakset);
numbers = undefined;
console.log(weakset);
Хотя мой массив [1, 2, 3]
не ссылается ни на что, он не удаляется из WeakSet. Консоль печатает:
WeakSet {[1, 2, 3], Object {name: "Charlie"}}
WeakSet {[1, 2, 3], Object {name: "Charlie"}}
Почему это?
Плюс, у меня есть еще один вопрос. В чем смысл добавлять объекты непосредственно к WeakSets, например:
weakset.add({name: "Charlie"});
Являются ли эти трассирующие сбои или я что-то упускаю?
И, наконец, что такое практическое использование WeakSet, если мы не можем даже перебирать его или не получать текущий размер?