Що таке WeakSet?
WeakSet - це «полегшена» версія Set,
яка зберігає тільки об'єкти і робить це слабким посиланням (тому й називається Weak).
Він потрібен для ситуацій, де ти хочеш зберігати унікальні об'єкти, але не заважати збирачу сміття (GC) їх видалити, якщо вони більше ніде не використовуються.
Створення WeakSet
const ws = new WeakSet();
const obj1 = { name: "Alice" };
const obj2 = { name: "Bob" };
ws.add(obj1);
ws.add(obj2);
console.log(ws.has(obj1)); // true-
Зберігає тільки об'єкти, не примітиви. (Спробуєш додати рядок або число - буде помилка.)
javascriptws.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) | Так | Ні |
| Використовується для тимчасових посилань | Рідко | Часто |
Приклад: автоматичне видалення
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зручним для зберігання тимчасових або кешованих об'єктів.
Реальний приклад використання
Відстеження, які об'єкти вже "оброблялись":
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- це колекція унікальних об'єктів, які автоматично видаляються з пам'яті, якщо на них більше немає інших посилань.
Чудово підходить для тимчасових позначок і кешування, не підходить, якщо потрібно зберігати дані постійно або перебирати їх.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.