0Pricing
JavaScript Academy · Lekcja

WeakMap i WeakSet — prosta prywatność i pamięci podręczne

Podstawy WeakMap i WeakSet: klucze będące wyłącznie obiektami, brak size i iterowania, pomocnicze mechanizmy prywatności oraz niewielkie pamięci podręczne automatycznie czyszczone

WeakMap i WeakSet — prosta prywatność i pamięci podręczne to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Po co kolekcje Weak?

Cel: dodawać metadane do obiektów bez uniemożliwiania ich usuwania przez moduł garbage collection.

  • WeakMap: obiekt → wartość
  • WeakSet: przynależność obiektu
  • Brak właściwości size i iterowania
  • Świetne rozwiązanie dla prywatności i pamięci podręcznych
WeakMap i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 1

Podstawy WeakMap

WeakMap akceptuje wyłącznie klucze będące obiektami; obsługuje set/get/has/delete, ale nie obsługuje iterowania ani właściwości size.

// 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 i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 2

Podstawy WeakSet

WeakSet przechowuje obiekty; nie pozwala na duplikaty, iterowanie ani właściwość size.

// 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 i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 3

Prywatność dzięki WeakMap

Za pomocą WeakMap można dołączać ukryte dane do obiektów API; gdy obiekty API przestaną istnieć, dane mogą zostać usunięte przez garbage collection.

// 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 i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 4

Pamięć podręczna dla każdego obiektu

Należy utworzyć pamięć podręczną dla każdego obiektu; wpisy znikną, gdy obiekt będący kluczem nie będzie już nigdzie używany.

// 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 i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 5

Ograniczenia i sytuacje, w których nie należy używać

Należy pamiętać:

  • WeakMap i WeakSet nie obsługują iterowania ani właściwości size.
  • Kluczami muszą być obiekty.
  • Map/Set należy użyć, jeśli trzeba wyświetlać klucze lub zliczać elementy.
WeakMap i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 6

Quiz: WeakMap kontra Map

Szybkie sprawdzenie: przypadek użycia WeakMap.

WeakMap i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 7

Podsumowanie

Podsumowanie: należy używać WeakMap do zapewniania prywatności danych obiektów → wartości oraz do pamięci podręcznych, a WeakSet do sprawdzania przynależności obiektów bez wycieków pamięci. Należy pamiętać: tylko klucze będące obiektami, bez iterowania i właściwości size.

WeakMap i WeakSet — prosta prywatność i pamięci podręczne — ilustracja 8

Często zadawane pytania

Czy lekcja „WeakMap i WeakSet — prosta prywatność i pamięci podręczne” jest bezpłatna?

Tak — pełny tekst „WeakMap i WeakSet — prosta prywatność i pamięci podręczne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „WeakMap i WeakSet — prosta prywatność i pamięci podręczne”?

Podstawy WeakMap i WeakSet: klucze będące wyłącznie obiektami, brak size i iterowania, pomocnicze mechanizmy prywatności oraz niewielkie pamięci podręczne automatycznie czyszczone Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.

Ile czasu zajmuje lekcja „WeakMap i WeakSet — prosta prywatność i pamięci podręczne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy Map i Set
  2. WeakMap i WeakSet — prosta prywatność i pamięci podręczne
  3. Wzorce iterowania
← Powrót do JavaScript Academy