WeakSet

Объект WeakSet - коллекция, элементами которой могут быть только объекты. Ссылки на эти объекты в WeakSet являются слабыми. Каждый объект может быть добавлен в WeakSet только один раз.

Синтаксис

 new WeakSet([iterable]);

Параметры

iterable
При передаче итерируемого объекта, все его элементы будут добавлены в новый WeakSet. Null обрабатывается как undefined.

Описание

Объекты WeakSet представляют собой коллекции объектов. Каждый объект в WeakSet встречается только один раз, что обеспечивает его уникальность в рамках коллекции WeakSet.

Главным отличия от объекта Set:

  • WeakSet содержит только объекты, тогда как Set - значения любого типа.
  • Ссылки на объекты в WeakSet являются слабыми: если на объект, хранимый в WeakSet нет ни одной внешней ссылки, то сборщик мусора удалит этот объект. Также это означает, что WeakSet не итерируем, так как нет возможности получить список текущих хранимых в WeakSet объектов.  

Свойства

WeakSet.length
Значение свойства length всегда равно 0.
WeakSet.prototype
Представляет прототип конструктора WeakSet. Позволяет добавлять свойства  всем объектам типа WeakSet.

Экземпляры WeakSet 

Все экземпляры класса WeakSet унаследованы от WeakSet.prototype.

Свойства

WeakSet.prototype.constructor
Возвращает функцию, создающую экземпляр прототипа. По умолчанию, это функция WeakSet.

Методы

WeakSet.prototype.add(value)
Добавляет объект value в WeakSet. 
WeakSet.prototype.delete(value)
Удаляет из WeakSet элемент value. После удаления вызов WeakSet.prototype.has(value) возвращает false. 
WeakSet.prototype.has(value)
Определяет, содержит WeakSet объект value или нет, возвращая, соответственно, true или false. 
WeakSet.prototype.clear() Этот API вышел из употребления и его работа больше не гарантируется.
Удаляет все элементы из объекта WeakSet.

Примеры

Использование объекта WeakSet 

var ws = new WeakSet();
var obj = {};
var foo = {};

ws.add(window);
ws.add(obj);

ws.has(window); // true
ws.has(foo);    // false, foo не добавлен в WeakSet

ws.delete(window); // удаляет window из WeakSet
ws.has(window);    // false, window был удалён

Спецификации

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'WeakSet' в этой спецификации.
Стандарт Изначальное определение.
ECMAScript (ECMA-262)
Определение 'WeakSet' в этой спецификации.
Живой стандарт  

Совместимость с браузерами

BCD tables only load in the browser

 

Смотрите также