ECMAScript 6: для чего нужен WeakSet?
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"});
Это глюки Traceur или я что-то упустил?
И, наконец, каково практическое использование WeakSet, если мы не можем ни перебрать его, ни получить текущий размер?