Skip to main content

Що таке WeakSet?

WeakSet - це «полегшена» версія Set, яка зберігає тільки об'єкти і робить це слабким посиланням (тому й називається Weak).

Він потрібен для ситуацій, де ти хочеш зберігати унікальні об'єкти, але не заважати збирачу сміття (GC) їх видалити, якщо вони більше ніде не використовуються.

Створення WeakSet

javascript
const ws = new WeakSet(); const obj1 = { name: "Alice" }; const obj2 = { name: "Bob" }; ws.add(obj1); ws.add(obj2); console.log(ws.has(obj1)); // true
  • Зберігає тільки об'єкти, не примітиви. (Спробуєш додати рядок або число - буде помилка.)

    javascript
    ws.add(123); // TypeError
  • Якщо obj1 більше ніде не використовується, збирач сміття видалить його автоматично з WeakSet.

Методи WeakSet

МетодОписПриклад
add(value)додає об'єктws.add(obj)
delete(value)видаляє об'єктws.delete(obj)
has(value)перевіряє наявністьws.has(obj)

Немає методів size, forEach, keys, values, entries

  • тому що WeakSet не можна перебирати.

Головна відмінність від Set:

ВластивістьSetWeakSet
Можна зберігати примітивиТакНі (тільки об'єкти)
Елементи "слабопов'язані" (GC може видалити)НіТак
Можна перебрати (for...of, size)ТакНі
Використовується для тимчасових посиланьРідкоЧасто

Приклад: автоматичне видалення

javascript
let obj = { id: 1 }; const ws = new WeakSet(); ws.add(obj); console.log(ws.has(obj)); // true obj = null; // тепер об'єкт більше не досяжний // об'єкт автоматично буде видалений з пам'яті збирачем сміття
  • Після obj = null об'єкт стає досяжним лише з WeakSet, тому GC (garbage collector) може видалити його.
  • Це робить WeakSet зручним для зберігання тимчасових або кешованих об'єктів.

Реальний приклад використання

Відстеження, які об'єкти вже "оброблялись":

javascript
const processed = new WeakSet(); function process(obj) { if (processed.has(obj)) { console.log("Вже оброблено"); return; } processed.add(obj); console.log("Обробка:", obj.name); } const user = { name: "Alice" }; process(user); // Обробка: Alice process(user); // Вже оброблено // Після user = null об'єкт автоматично видалиться з WeakSet

Коротко:

ВластивістьЗначення
ТипКолекція унікальних об'єктів
ПримітивиНе можна
Збирач сміттяМоже видалити елементи
ПеребірНеможливий
Методиadd, delete, has
Часте застосуванняКешування, позначки "оброблено", приватні дані

Підсумок: WeakSet - це колекція унікальних об'єктів, які автоматично видаляються з пам'яті, якщо на них більше немає інших посилань.

Чудово підходить для тимчасових позначок і кешування, не підходить, якщо потрібно зберігати дані постійно або перебирати їх.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.