Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since сентябрь 2015 г..
* Some parts of this feature may have varying levels of support.
WeakSet — это набор значений, поддерживающих сборку мусора, включая объекты и незарегистрированные символы. Каждое значение в WeakSet может встречаться только один раз, оно уникально в коллекции WeakSet.
Значения в WeakSet должны поддерживать сборку мусора. Большинство примитивных типов данных могут не иметь времени жизни, поэтому они не могут быть сохранены. Объекты и незарегистрированные символы могут быть сохранены потому что они поддерживают сборку мусора.
Ключевые отличия от Set:
WeakSet — это набор только объектов и символов. В отличие от Set он не может содержать произвольные значения любого типа.
WeakSet является слабым в том смысле, что ссылки на объекты в WeakSet хранятся слабо. Если нет других ссылок на значение, хранящееся в WeakSet, эти значения могут быть удалены сборщиком мусора.
Примечание: Это также означает, что нет списка текущих значений сохранённых в наборе. Объекты WeakSet не перечислимы.
Функциям, которые вызывают себя рекурсивно, необходим способ защиты от циклических структур данных путём отслеживания того, какие объекты уже были обработаны.
Объекты WeakSet идеально подходят для этого:
Здесь WeakSet создаётся при первом запуске и передаётся вместе с каждым последующим вызовом функции (с использованием внутреннего параметра _refs).
Количество объектов или порядок их обхода не имеют значения, поэтому использование WeakSet более эффективно, чем Set для отслеживания ссылок на объекты, особенно если задействовано очень большое количество объектов.
Создаёт новый объект WeakSet.
Эти свойства определены в WeakSet.prototype и есть у всех экземпляров WeakSet.
WeakSet.prototype.constructorФункция-конструктор, создающая экземпляр объекта. Для экземпляров WeakSet начальным значением является конструктор WeakSet.
WeakSet.prototype[@@toStringTag]Начальным значением свойства @@toStringTag является строка "WeakSet". Это свойство используется в Object.prototype.toString().
Добавляет value в объект WeakSet.
WeakSet.prototype.delete()Удаляет value из WeakSet. После этого WeakSet.prototype.has(value) будет возвращать false.
WeakSet.prototype.has()Возвращает булево значение, показывающее присутствует ли value в объекте WeakSet или нет.
Обратите внимание, что foo !== bar. Хотя это похожие объекты, это не один и тот же объект. И поэтому они оба добавляются в набор.
| ECMAScript® 2027 Language Specification # sec-weakset-objects |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 11 авг. 2024 г. by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.