JavaScript Academy · Lektion

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.

Lektion 2 af 38 trin

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
WeakMap og WeakSet — enkel privathed og caches — illustration 1

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
WeakMap og WeakSet — enkel privathed og caches — illustration 2

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
WeakMap og WeakSet — enkel privathed og caches — illustration 3

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)
WeakMap og WeakSet — enkel privathed og caches — illustration 4

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
WeakMap og WeakSet — enkel privathed og caches — illustration 5

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.
WeakMap og WeakSet — enkel privathed og caches — illustration 6

Quiz om WeakMap og Map

Hurtigt tjek: Anvendelse af WeakMap.

WeakMap og WeakSet — enkel privathed og caches — illustration 7

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.

WeakMap og WeakSet — enkel privathed og caches — illustration 8
Gratis at komme i gang

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

  1. Det vigtigste i Map og Set
  2. WeakMap og WeakSet — enkel privathed og caches
  3. Iterationsmønstre
← Tilbage til JavaScript Academy