JavaScript Academy · Lektion

Det globala Symbol-registret

Dela symboler med Symbol.for och keyFor.

Lektion 3 av 413 steg

Det globala Symbol-registret är en gratis lektion i JavaScript Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för JavaScript Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i JavaScript Academy innehåller totalt 4 lektioner.

Ett delat register

Det globala symbolregistret låter dig skapa symboler som delas i hela programmet med hjälp av en nyckel, i stället för att alltid vara unika.

const a = Symbol.for("app.id")
const b = Symbol.for("app.id")
console.log(a === b)

Symbol.for

Symbol.for slår upp en symbol med hjälp av en strängnyckel i registret. Om en sådan redan finns returneras den; annars skapas en ny och lagras.

const token = Symbol.for("token")
console.log(token.description)

Delad identitet

Till skillnad från vanliga anrop till Symbol returnerar två anrop till Symbol.for med samma nyckel exakt samma symbol, så de jämförs som lika.

const x = Symbol.for("shared")
const y = Symbol.for("shared")
console.log(x === y)

Skillnaden mot Symbol

Vanliga anrop till Symbol skapar alltid en ny unik symbol, medan Symbol.for återanvänder en befintlig registerpost för samma nyckel.

const local1 = Symbol("k")
const local2 = Symbol("k")
const global1 = Symbol.for("k")
const global2 = Symbol.for("k")
console.log(local1 === local2)
console.log(global1 === global2)

Symbol.keyFor

Symbol.keyFor gör det omvända: när den får en registersymbol returnerar den strängnyckeln som användes för att skapa den.

const s = Symbol.for("config")
console.log(Symbol.keyFor(s))

keyFor och lokala symboler

För en symbol som inte finns i registret returnerar Symbol.keyFor undefined, vilket är ett sätt att kontrollera om en symbol är global.

const local = Symbol("private")
const global = Symbol.for("public")
console.log(Symbol.keyFor(local))
console.log(Symbol.keyFor(global))

Delning mellan moduler

Registret delas även mellan olika delar av en applikation, till exempel separata moduler, vilket gör det användbart för välkända samordningsnycklar.

function getKey() { return Symbol.for("event.bus") }
console.log(getKey() === Symbol.for("event.bus"))

Namngivningskonventioner

Eftersom registret är globalt bör du prefixera dina nycklar för att undvika kollisioner med andra bibliotek, till exempel med ett namnområde som ditt appnamn.

const a = Symbol.for("myapp.user.id")
const b = Symbol.for("myapp.user.id")
console.log(a === b)

Registret består

När en nyckel har registrerats returnerar varje senare anrop till Symbol.for med den nyckeln samma symbol under programmets hela livstid.

Symbol.for("once")
const again = Symbol.for("once")
console.log(Symbol.keyFor(again))

När registret bör användas

Använd registret när separat kod behöver enas om samma symbol via dess namn. Använd vanliga anrop till Symbol när unikhet och privathet är viktigare.

const sharedFlag = Symbol.for("feature.enabled")
const privateFlag = Symbol("feature.enabled")
console.log(sharedFlag === Symbol.for("feature.enabled"))
console.log(privateFlag === Symbol.for("feature.enabled"))

Kombinera med objektnycklar

Registers symboler fungerar även som objektnycklar, vilket gör det möjligt att dela metadata som alla samverkande moduler kan läsa genom att hämta symbolen igen.

const META = Symbol.for("meta")
const obj = { [META]: "shared data" }
console.log(obj[Symbol.for("meta")])

Snabbtest

Testa dina kunskaper om symbolregistret.

Sammanfattning

Sammanfattning: Det globala registret delar symboler via nycklar.

  • Symbol.for återanvänder eller skapar en registersymbol
  • Samma nyckel returnerar samma symbol
  • Symbol.keyFor returnerar nyckeln eller undefined för lokala symboler
  • Använd namnområden i nycklar för att undvika konflikter
const a = Symbol.for("k")
console.log(Symbol.keyFor(a))
Gratis att börja

Lär dig JavaScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
59
Lektioner
200

Vanliga frågor

Är lektionen ”Det globala Symbol-registret” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen JavaScript Academy, inklusive ”Det globala Symbol-registret”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i JavaScript Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Det globala Symbol-registret”?

Dela symboler med Symbol.for och keyFor. Ni övar på JavaScript Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig JavaScript Academy?

Du behöver inga förkunskaper. Utbildningen i JavaScript Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Det globala Symbol-registret”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här JavaScript Academy-lektionen?

Ja. Varje JavaScript Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Skapa unika Symbol-värden
  2. Symboler som objektnycklar
  3. Det globala Symbol-registret
  4. Välkända symboler
← Tillbaka till JavaScript Academy