JavaScript Academy · Lektion

Det globale Symbol-register

Del symboler med Symbol.for og keyFor.

Lektion 3 af 413 trin

Det globale Symbol-register er en gratis JavaScript Academy-lektion på CoddyKit. Dette er lektion 3 af 4. 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 4 lektioner i alt.

Et fælles register

Det globale symbolregister lader dig oprette symboler, der deles i hele programmet via en nøgle, i stedet for at de altid er entydige.

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

Symbol.for

Symbol.for slår et symbol op ud fra en strengnøgle i registret. Hvis et symbol findes, returneres det; ellers oprettes et nyt og gemmes.

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

Fælles identitet

I modsætning til almindelige kald til Symbol returnerer to kald til Symbol.for med den samme nøgle præcis det samme symbol, så de er lig med hinanden.

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

Sammenligning med Symbol

Et almindeligt Symbol opretter altid et nyt, entydigt symbol, mens Symbol.for genbruger en eksisterende post i registret for den samme nøgle.

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 omvendte: Når den får et registersymbol, returnerer den den strengnøgle, der blev brugt til at oprette det.

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

keyFor og lokale symboler

For et symbol, der ikke findes i registret, returnerer Symbol.keyFor undefined. Det er en måde at teste, om et symbol er globalt.

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

Deling på tværs af moduler

Registret deles også på tværs af forskellige dele af en applikation, for eksempel separate moduler, hvilket gør det nyttigt til velkendte koordineringsnøgler.

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

Navngivningskonventioner

Fordi registret er globalt, bør du sætte præfikser på dine nøgler for at undgå kollisioner med andre biblioteker, for eksempel ved at bruge et navnerum med dit appnavn.

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

Registret bevares

Når en nøgle først er registreret, returnerer alle efterfølgende kald til Symbol.for med den nøgle det samme symbol i hele programmets levetid.

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

Hvornår registret skal bruges

Brug registret, når separat kode skal kunne blive enig om det samme symbol ud fra et navn. Brug almindeligt Symbol, når entydighed og privatliv er vigtigere.

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"))

Kombination med objektnøgler

Registers symboler fungerer også som objektnøgler, så de kan bruges til delte metadata, som ethvert samarbejdende modul kan læse ved at hente symbolet igen.

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

Hurtig kontrol

Test din viden om registre.

Opsummering

Opsummering: Det globale register deler symboler via nøgler.

  • Symbol.for genbruger eller opretter et registersymbol
  • Den samme nøgle returnerer det samme symbol
  • Symbol.keyFor returnerer nøglen eller undefined for lokale symboler
  • Brug navnerum i nøgler for at undgå kollisioner
const a = Symbol.for("k")
console.log(Symbol.keyFor(a))
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 “Det globale Symbol-register” gratis?

Ja — alle 3 lektioner i læringssporet JavaScript Academy, inklusive “Det globale Symbol-register”, 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 4 lektioner i alt.

Hvad lærer jeg i “Det globale Symbol-register”?

Del symboler med Symbol.for og keyFor. 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 3 af 4.

Hvor lang tid tager lektionen “Det globale Symbol-register”?

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. Oprettelse af unikke Symbol-værdier
  2. Symboler som objektnøgler
  3. Det globale Symbol-register
  4. Velkendte symboler
← Tilbage til JavaScript Academy