логотип PurpleSchool
логотип PurpleSchool

Объект WeakSet в JavaScript

Автор

Дмитрий Нечаев

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

Создание WeakSet

Для создания нового объекта WeakSet используется конструктор WeakSet(). В отличие от Set, WeakSet не принимает массив или другие итерируемые объекты в качестве аргумента при создании.

// Создание пустого объекта WeakSet
const weakSet = new WeakSet();

Добавление и удаление объектов

Объекты можно добавлять в WeakSet с помощью метода add(). После добавления объекта в WeakSet, объект будет храниться в коллекции до тех пор, пока на него существует ссылка в другом месте программы. Для удаления объекта из WeakSet используется метод delete().

// Создание объектов
const obj1 = { name: 'Объект 1' };
const obj2 = { name: 'Объект 2' };

// Добавление объектов в WeakSet
weakSet.add(obj1);
weakSet.add(obj2);

console.log(weakSet.has(obj1)); // Выведет: true

// Удаление объекта из WeakSet
weakSet.delete(obj1);

console.log(weakSet.has(obj1)); // Выведет: false

Ограничения WeakSet

Одним из ограничений WeakSet является то, что он не итерируем, что означает, что нельзя перебрать его элементы с помощью циклов или методов массивов, таких как forEach(). Также нельзя определить размер WeakSet с помощью свойства size.

// Нельзя использовать цикл для итерации по WeakSet
// for (const item of weakSet) { // TypeError: weakSet is not iterable
//     console.log(item);
// }

// Нельзя определить размер WeakSet
// console.log(weakSet.size); // undefined

Применение WeakSet

WeakSet находит применение в тех случаях, когда необходимо временно хранить ссылки на объекты, при этом не создавая для них дополнительных ссылок. Например, он может использоваться для хранения слабых ссылок на объекты, которые могут быть автоматически удалены из WeakSet сборщиком мусора, если на них больше нет других ссылок.

Заключение

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

Объект TypedArray в JavaScriptСтрелочка вправо

Все гайды по Javascript

Как работает метод trim() - JavaScriptКак работает метод toUpperCase() - JavaScriptКак работает метод toLowerCase() - JavaScriptКак работает метод substring() - JavaScriptКак работает метод startsWith() - JavaScriptКак работает метод split() - JavaScriptКак работает метод slice() - JavaScriptКак работает метод search() - JavaScriptКак работает метод replaceAll() - JavaScriptКак работает метод replace() - JavaScriptКак работает метод repeat() - JavaScriptКак работает метод padStart() - JavaScriptКак работает метод padEnd() - JavaScriptКак работает метод matchAll() - JavaScriptКак работает метод match() - JavaScriptКак работает метод localeCompare() - JavaScriptКак работает свойство length - JavaScriptКак работает метод lastIndexOf() - JavaScriptКак работает метод indexOf() - JavaScriptКак работает метод includes() - JavaScriptКак работает метод fromCodePoint() - JavaScriptКак работает метод fromCharCode() - JavaScriptКак работает метод endsWith() - JavaScriptКак работает метод concat() - JavaScriptКак работает метод codePointAt() - JavaScriptКак работает метод charCodeAt() - JavaScriptКак работает метод charAt() - JavaScript
Итератор в JavaScript
try...catch в JavaScriptError в JavaScript
Событие wheel в JavaScriptСобытие unload в JavaScriptСобытие touch в JavaScriptСобытие submit в JavaScriptСобытие scroll в JavaScriptСобытие reset в JavaScriptМетод .preventDefault() в JavaScriptСобытие mouseover в JavaScriptСобытие mouseout в JavaScriptСобытие load в JavaScriptСобытие keyup в JavaScriptСобытие keydown в JavaScriptСобытие invalid в JavaScriptСобытие input в JavaScriptСобытийная модель Event в JavaScriptОбъект события Event в JavaScriptСобытие DOMContentLoaded в JavaScriptСобытие dblclick в JavaScriptСобытие click в JavaScriptСобытие change в JavaScriptСобытие beforeunload в JavaScript
Как работает метод some() - JavaScriptКак работает метод reverse() - JavaScriptКак работает метод reduce() - JavaScriptКак работает метод map() - JavaScriptКак работает метод isArray() - JavaScriptКак работает метод indexOf() - JavaScriptКак работает метод includes() - JavaScriptКак работает метод from() - JavaScriptКак работает метод forEach() - JavaScriptКак работает метод flatMap() - JavaScriptКак работает метод flat() - JavaScriptКак работает метод findIndex() - JavaScriptКак работает метод find() - JavaScriptКак работает метод filter() - JavaScriptКак работает метод every() - JavaScriptМассивы в JavaScript
Открыть базу знаний