Det globala Symbol-registret
Dela symboler med Symbol.for och keyFor.
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))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
- Skapa unika Symbol-värden
- Symboler som objektnycklar
- Det globala Symbol-registret
- Välkända symboler