логотип 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 представляет собой удобный инструмент для хранения временных ссылок на уникальные объекты. Она обеспечивает автоматическое удаление объектов из коллекции, когда на них больше нет других ссылок, что упрощает управление памятью и избавляет от необходимости явно удалять объекты из коллекции. Однако следует помнить о его ограничениях и использовать его там, где это действительно необходимо.

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile