WeakMap og WeakSet — enkel privathed og caches
Lær det vigtigste om WeakMap og WeakSet: nøgler, der kun kan være objekter, ingen size eller iteration, hjælpere til privathed og små caches, der ryddes automatisk.
WeakMap og WeakSet — enkel privathed og caches er en gratis JavaScript Academy-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i JavaScript Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. JavaScript Academy-kurset indeholder 3 lektioner i alt.
Hvorfor svage samlinger?
Mål: Tilføj metadata til objekter uden at forhindre automatisk frigivelse af hukommelse.
- WeakMap: objekt → værdi
- WeakSet: medlemskab af objekter
- Ingen size, intet gennemløb
- Velegnet til privatliv og cachelagre

Det vigtigste om WeakMap
WeakMap accepterer kun objekter som nøgler; understøtter set/get/has/delete; intet gennemløb eller 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

Det vigtigste om WeakSet
WeakSet indeholder objekter; ingen dubletter, intet gennemløb og ingen size-egenskab.
// 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

Privatliv via WeakMap
Brug en WeakMap til at knytte skjulte data til API-objekter; når API-objekterne er væk, kan dataene fjernes automatisk.
// 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 pr. objekt
Opret en cache pr. objekt; elementerne forsvinder, når der ikke længere er nogen referencer til nøgleobjektet.
// 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

Begrænsninger og hvornår det ikke skal bruges
Husk:
- Der er intet gennemløb eller size på WeakMap/WeakSet.
- Nøglerne skal være objekter.
- Brug Map/Set, hvis du har brug for at vise nøgler eller tælle elementer.

Quiz om WeakMap og Map
Hurtigt tjek: Anvendelse af WeakMap.

Opsummering
Opsummering: Brug WeakMap til privatliv og cachelagre med objekt→værdi; brug WeakSet til medlemskab af objekter uden hukommelseslækager. Husk: Kun objekter som nøgler, intet gennemløb eller size.

Lær JavaScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 59
- Lektioner
- 200
Ofte stillede spørgsmål
Er lektionen “WeakMap og WeakSet — enkel privathed og caches” gratis?
Ja — alle 3 lektioner i læringssporet JavaScript Academy, inklusive “WeakMap og WeakSet — enkel privathed og caches”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. JavaScript Academy-kurset indeholder 3 lektioner i alt.
Hvad lærer jeg i “WeakMap og WeakSet — enkel privathed og caches”?
Lær det vigtigste om WeakMap og WeakSet: nøgler, der kun kan være objekter, ingen size eller iteration, hjælpere til privathed og små caches, der ryddes automatisk. Du øver dig i JavaScript Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på JavaScript Academy?
Der kræves ingen tidligere erfaring. JavaScript Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.
Hvor lang tid tager lektionen “WeakMap og WeakSet — enkel privathed og caches”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne JavaScript Academy-lektion?
Ja. Alle JavaScript Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Det vigtigste i Map og Set
- WeakMap og WeakSet — enkel privathed og caches
- Iterationsmønstre