0Pricing
JavaScript Academy · Урок

WeakMap и WeakSet — простая приватность и кэши

Изучите основы WeakMap и WeakSet: ключи только-объекты, отсутствие размера и перебора, средства приватности и небольшие кэши с автоматической очисткой

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

Зачем нужны слабые коллекции

Цель: добавлять метаданные к объектам, не препятствуя сборке мусора.

  • WeakMap: объект → значение
  • WeakSet: принадлежность объекта
  • Нет размера и перебора
  • Отлично подходят для конфиденциальных данных и кэшей
WeakMap и WeakSet — простая приватность и кэши — иллюстрация 1

Основы 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
WeakMap и WeakSet — простая приватность и кэши — иллюстрация 2

Основы 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 и WeakSet — простая приватность и кэши — иллюстрация 3

Конфиденциальность с помощью 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)
WeakMap и WeakSet — простая приватность и кэши — иллюстрация 4

Кэш для каждого объекта

Создайте кэш для каждого объекта; записи исчезнут, когда на объект-ключ больше не останется ссылок.

// 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 — простая приватность и кэши — иллюстрация 5

Ограничения и случаи, когда не следует использовать

Запомните:

  • В WeakMap и WeakSet нет перебора или размера.
  • Ключами могут быть только объекты.
  • Используйте отображение или множество, если нужно перечислить ключи или посчитать элементы.
WeakMap и WeakSet — простая приватность и кэши — иллюстрация 6

Тест по WeakMap и отображению

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

WeakMap и WeakSet — простая приватность и кэши — иллюстрация 7

Итоги

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

WeakMap и WeakSet — простая приватность и кэши — иллюстрация 8

Часто задаваемые вопросы

Урок «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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы Map и Set
  2. WeakMap и WeakSet — простая приватность и кэши
  3. Шаблоны перебора
← Назад к JavaScript Academy