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

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

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

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)

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

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.

Quiz: WeakMap kontra Map
Szybkie sprawdzenie: przypadek użycia WeakMap.

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.

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
- Podstawy Map i Set
- WeakMap i WeakSet — prosta prywatność i pamięci podręczne
- Wzorce iterowania