WeakMap и WeakSet — простая приватность и кэши
Изучите основы WeakMap и WeakSet: ключи только-объекты, отсутствие размера и перебора, средства приватности и небольшие кэши с автоматической очисткой
«WeakMap и WeakSet — простая приватность и кэши» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 3 уроков всего.
Зачем нужны слабые коллекции
Цель: добавлять метаданные к объектам, не препятствуя сборке мусора.
- WeakMap: объект → значение
- WeakSet: принадлежность объекта
- Нет размера и перебора
- Отлично подходят для конфиденциальных данных и кэшей

Основы WeakMap
WeakMap принимает только ключи-объекты; поддерживает set/get/has/delete, но не поддерживает перебор или размер.
// WeakMap: keys must be objects
const wm = new WeakMap();
const user = { name: "Ayla" };
wm.set(user, { visits: 1 });
console.log("has user?", wm.has(user));
console.log("get meta:", wm.get(user));
// Note: no wm.size, no wm.keys() — not iterable

Основы WeakSet
WeakSet хранит объекты; дубликаты, перебор и свойство размера не поддерживаются.
// WeakSet: store objects without duplicates
const ws = new WeakSet();
const obj1 = {};
const obj2 = {};
ws.add(obj1);
ws.add(obj2);
ws.add(obj1); // duplicate ignored
console.log("has obj1?", ws.has(obj1));
// Note: no ws.size and no iteration

Конфиденциальность с помощью WeakMap
Используйте WeakMap, чтобы прикреплять скрытые данные к объектам API; когда объекты API исчезают, данные могут быть собраны сборщиком мусора.
// Privacy helper: store private data outside the object
const _priv = new WeakMap();
function makeCounter() {
const api = {};
_priv.set(api, { value: 0 });
api.inc = function () {
const box = _priv.get(api);
box.value = box.value + 1;
console.log("value", box.value);
};
// No public field exposes value directly
return api;
}
const c = makeCounter();
c.inc();
c.inc();
// console.log(c.value) -> undefined (nothing public)

Кэш для каждого объекта
Создайте кэш для каждого объекта; записи исчезнут, когда на объект-ключ больше не останется ссылок.
// Cache computed data per object without leaks
const cache = new WeakMap();
function computeLength(doc) {
// Return cached result if present
if (cache.has(doc)) {
return cache.get(doc);
}
// Fake "expensive" compute
const result = (doc.text || "").length;
cache.set(doc, result);
return result;
}
const d1 = { text: "hello" };
const d2 = { text: "world!" };
console.log("len d1:", computeLength(d1));
console.log("len d1 cached:", computeLength(d1));
console.log("len d2:", computeLength(d2));
// If d1/d2 become unreachable, their cache entries can disappear automatically

Ограничения и случаи, когда не следует использовать
Запомните:
- В WeakMap и WeakSet нет перебора или размера.
- Ключами могут быть только объекты.
- Используйте отображение или множество, если нужно перечислить ключи или посчитать элементы.

Тест по WeakMap и отображению
Быстрая проверка: сценарий использования WeakMap.

Итоги
Итоги: Используйте WeakMap для конфиденциального хранения соответствий объект→значение и кэшей; используйте WeakSet для проверки принадлежности объектов без утечек. Помните: только ключи-объекты, без перебора и размера.

Часто задаваемые вопросы
Урок «WeakMap и WeakSet — простая приватность и кэши» бесплатный?
Да — полный текст урока «WeakMap и WeakSet — простая приватность и кэши» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «WeakMap и WeakSet — простая приватность и кэши»?
Изучите основы WeakMap и WeakSet: ключи только-объекты, отсутствие размера и перебора, средства приватности и небольшие кэши с автоматической очисткой Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать JavaScript Academy?
Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.
Сколько времени занимает урок «WeakMap и WeakSet — простая приватность и кэши»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке JavaScript Academy?
Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы Map и Set
- WeakMap и WeakSet — простая приватность и кэши
- Шаблоны перебора