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()
Удаляет все элементы из объекта 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 2017 Draft (ECMA-262)
Определение 'WeakSet' в этой спецификации.
Черновик  

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

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 36 34 (34) Нет 23 9
new WeakSet(iterable) 38 34 (34) Нет 25 9
Constructor argument: new WeakSet(null) (Да) 37 (37) ? ? 9
Monkey-patched add() in Constructor (Да) 37 (37) ? ? 9
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support Нет 34.0 (34) Нет Нет 9
new WeakMap(iterable) Нет 34.0 (34) Нет Нет 9
Constructor argument: new WeakSet(null) ? (Да) ? ? 9
Monkey-patched add() in Constructor ? (Да) ? ? 9

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

Метки документа и участники

 Внесли вклад в эту страницу: stRavens, fscholz
 Обновлялась последний раз: stRavens,