JavaScript Academy · leksjon

Symboler som objektnøkler

Bruk symboler til egenskaper uten navnekollisjoner.

Leksjon 2 av 413 trinn

Symboler som objektnøkler er en gratis leksjon i JavaScript Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i JavaScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i JavaScript Academy inneholder totalt 4 leksjoner.

Symboler som nøkler

Et symbol kan brukes som en objektegenskapsnøkkel. Fordi hvert symbol er unikt, kan en slik egenskap ikke utilsiktet kollidere med en strengnøkkel.

const id = Symbol("id")
const user = {}
user[id] = 123
console.log(user[id])

Beregnede symbolnøkler

For å bruke et symbol som nøkkel i en objektliteralerklæring må du omslutte det med hakeparenteser som et beregnet egenskapsnavn.

const id = Symbol("id")
const user = {
  name: "Ann",
  [id]: 99
}
console.log(user[id])

Lese en symbolegenskap

Du må ha en referanse til det samme symbolet for å lese egenskapen. Uten denne referansen er verdien i praksis skjult.

const secret = Symbol("secret")
const obj = { [secret]: "hidden" }
console.log(obj[secret])

Ikke opplistet i for-in

Symbolnøkler hoppes over av en for-in-løkke. Dermed holdes symbolegenskaper utenfor vanlig iterasjon.

const tag = Symbol("tag")
const obj = { a: 1, b: 2, [tag]: 3 }
for (const key in obj) {
  console.log(key)
}

Hoppes over av Object.keys

Object.keys returnerer bare strengnøkler, så symbolegenskaper utelates også der.

const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
console.log(Object.keys(obj))

Skjult fra JSON

JSON.stringify ignorerer symbolnøkler fullstendig, så de vises aldri i serialisert output. Dette gjør dem nyttige for interne metadata.

const meta = Symbol("meta")
const obj = { name: "Bo", [meta]: "internal" }
console.log(JSON.stringify(obj))

Finne symbolnøkler

For å liste opp symbolnøkler bruker du Object.getOwnPropertySymbols, som returnerer en array med symbolegenskapene i et objekt.

const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
const syms = Object.getOwnPropertySymbols(obj)
console.log(syms.length)

Unngå navnekollisjoner

Symbolnøkler lar ulike biblioteker legge til egenskaper i det samme objektet uten risiko for å overskrive hverandre, siden symbolene deres er forskjellige.

const libA = Symbol("data")
const libB = Symbol("data")
const shared = {}
shared[libA] = 1
shared[libB] = 2
console.log(shared[libA], shared[libB])

Symbolnøkler og spread

Objektets spread-operator kopierer også symbolnøkler, i motsetning til for-in og Object.keys. Vær derfor oppmerksom på at de blir med når du kloner objekter.

const tag = Symbol("tag")
const src = { a: 1, [tag]: 2 }
const copy = { ...src }
console.log(copy[tag])

Lagre data som ligner private data

Symbolnøkler gir en mild form for personvern: Dataene kan bare nås av kode som har symbolet, og holdes dermed utenfor vanlige egenskapslister.

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

Slette symbolegenskaper

Du fjerner en symbolegenskap på samme måte som alle andre egenskaper, ved å bruke delete-operatoren sammen med symbolreferansen.

const tag = Symbol("tag")
const obj = { [tag]: 5 }
delete obj[tag]
console.log(obj[tag])

Kort kontroll

Test kunnskapene dine om symbolnøkler.

Oppsummering

Oppsummering: Symboler gir trygge, skjulte objektnøkler.

  • Bruk hakeparenteser for beregnede symbolnøkler
  • Hoppes over av for-in, Object.keys og JSON
  • Kan listes opp med Object.getOwnPropertySymbols
  • Utmerket for metadata uten kollisjoner
const k = Symbol("k")
const o = { [k]: 7 }
console.log(o[k])
Gratis å komme i gang

Lær deg JavaScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
59
Leksjoner
200

Ofte stilte spørsmål

Er leksjonen «Symboler som objektnøkler» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien JavaScript Academy, inkludert «Symboler som objektnøkler», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i JavaScript Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Symboler som objektnøkler»?

Bruk symboler til egenskaper uten navnekollisjoner. Du øver på JavaScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med JavaScript Academy?

Ingen tidligere erfaring er nødvendig. JavaScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Symboler som objektnøkler»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne JavaScript Academy-leksjonen?

Ja. Alle JavaScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Opprette unike Symbol-verdier
  2. Symboler som objektnøkler
  3. Det globale Symbol-registeret
  4. Velkjente symboler
← Tilbake til JavaScript Academy