Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке WeakSet?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)`WeakSet` - це "полегшена" версія `Set`, яка зберігає **тільки об'єкти** і робить це слабким посиланням (тому й називається *Weak*). **Ключове:** він потрібен для ситуацій, де ти хочеш зберігати унікальні об'єкти, але не заважати збирачу сміття (GC) їх видалити, якщо вони більше ніде не використовуються.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення`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: | Властивість | `Set` | `WeakSet` | |---|---|---| | Можна зберігати примітиви | Так | Ні (тільки об'єкти) | | Елементи "слабопов'язані" (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` - це колекція **унікальних об'єктів**, > які **автоматично видаляються з пам'яті**, > якщо на них більше немає інших посилань. Чудово підходить для тимчасових позначок і кешування, не підходить, якщо потрібно зберігати дані постійно або перебирати їх.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.