Symboler som objektnøgler
Brug symboler til egenskaber uden navnekollisioner.
Symboler som objektnøgler er en gratis JavaScript Academy-lektion på CoddyKit. Dette er lektion 2 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.
Symboler som nøgler
Et symbol kan bruges som en objektegenskabsnøgle. Fordi hvert symbol er entydigt, kan en sådan egenskab ikke utilsigtet kollidere med en strengnøgle.
const id = Symbol("id")
const user = {}
user[id] = 123
console.log(user[id])Beregnede symbolnøgler
Hvis du vil bruge et symbol som nøgle i en objektliteral, skal du omslutte det med kantede parenteser som et beregnet egenskabsnavn.
const id = Symbol("id")
const user = {
name: "Ann",
[id]: 99
}
console.log(user[id])Læsning af en symbolegenskab
Du skal have en reference til det samme symbol for at læse dets egenskab. Uden denne reference er værdien reelt skjult.
const secret = Symbol("secret")
const obj = { [secret]: "hidden" }
console.log(obj[secret])Kan ikke opregnes med for-in
Symbolnøgler springes over af en for-in-løkke. Det holder symbolegenskaber ude af almindelig gennemløb.
const tag = Symbol("tag")
const obj = { a: 1, b: 2, [tag]: 3 }
for (const key in obj) {
console.log(key)
}Springes over af Object.keys
Object.keys returnerer kun strengnøgler, så symbolnøglerede egenskaber udelades også her.
const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
console.log(Object.keys(obj))Skjult fra JSON
JSON.stringify ignorerer symbolnøgler fuldstændigt, så de vises aldrig i det serialiserede resultat. Det gør dem nyttige til interne metadata.
const meta = Symbol("meta")
const obj = { name: "Bo", [meta]: "internal" }
console.log(JSON.stringify(obj))Find symbolnøgler
Brug Object.getOwnPropertySymbols til at vise symbolnøgler. Metoden returnerer et array med et objekts symbolegenskaber.
const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
const syms = Object.getOwnPropertySymbols(obj)
console.log(syms.length)Undgå navnekollisioner
Symbolnøgler lader forskellige biblioteker føje egenskaber til det samme objekt uden risiko for at overskrive hinanden, fordi deres symboler er forskellige.
const libA = Symbol("data")
const libB = Symbol("data")
const shared = {}
shared[libA] = 1
shared[libB] = 2
console.log(shared[libA], shared[libB])Symbolnøgler og spread
Objektets spread-operator kopierer også symbolnøgler i modsætning til for-in og Object.keys, så vær opmærksom på, at de følger med ved kloning.
const tag = Symbol("tag")
const src = { a: 1, [tag]: 2 }
const copy = { ...src }
console.log(copy[tag])Lagring af privatlignende data
Symbolnøgler giver en mild form for privatliv: Dataene kan kun nås af kode, der har symbolet, så de holdes ude af normale egenskabslister.
const balance = Symbol("balance")
function makeAccount() {
const acct = {}
acct[balance] = 100
return { acct: acct, key: balance }
}
const a = makeAccount()
console.log(a.acct[a.key])Sletning af symbolegenskaber
Du fjerner en symbolegenskab på samme måde som enhver anden egenskab ved at bruge delete-operatoren sammen med symbolreferencen.
const tag = Symbol("tag")
const obj = { [tag]: 5 }
delete obj[tag]
console.log(obj[tag])Hurtig kontrol
Test din viden om symbolnøgler.
Opsummering
Opsummering: Symboler giver sikre, skjulte objektnøgler.
- Brug kantede parenteser til beregnede symbolnøgler
- Springes over af for-in, Object.keys og JSON
- Vises med Object.getOwnPropertySymbols
- Fremragende til metadata uden navnekollisioner
const k = Symbol("k")
const o = { [k]: 7 }
console.log(o[k])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 “Symboler som objektnøgler” gratis?
Ja — alle 3 lektioner i læringssporet JavaScript Academy, inklusive “Symboler som objektnøgler”, 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 “Symboler som objektnøgler”?
Brug symboler til egenskaber uden navnekollisioner. 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 4.
Hvor lang tid tager lektionen “Symboler som objektnøgler”?
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
- Oprettelse af unikke Symbol-værdier
- Symboler som objektnøgler
- Det globale Symbol-register
- Velkendte symboler