0Pricing
JavaScript Academy · Aula

Symbols como chaves de objetos

Use Symbols para propriedades sem colisões.

Symbols como chaves de objetos é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.

Símbolos como chaves

Um símbolo pode ser usado como uma chave de propriedade de objeto. Como cada símbolo é exclusivo, essa propriedade não pode colidir acidentalmente com nenhuma chave de texto.

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

Chaves de símbolo calculadas

Para usar um símbolo como chave em um literal de objeto, coloque-o entre colchetes como um nome de propriedade calculado.

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

Lendo uma propriedade de símbolo

Você precisa manter uma referência ao mesmo símbolo para ler a propriedade dele. Sem essa referência, o valor fica efetivamente oculto.

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

Não enumeráveis em for-in

As chaves de símbolo são ignoradas por um laço for-in. Isso mantém as propriedades de símbolo fora da iteração comum.

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

Ignoradas por Object.keys

Object.keys retorna apenas chaves de texto, portanto as propriedades com chaves de símbolo também são excluídas.

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

Ocultos do JSON

JSON.stringify ignora completamente as chaves de símbolo, portanto elas nunca aparecem na saída serializada. Isso as torna úteis para metadados internos.

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

Encontrando chaves de símbolo

Para listar as chaves de símbolo, use Object.getOwnPropertySymbols, que retorna uma matriz com as propriedades de símbolo próprias de um objeto.

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

Evitando conflitos de nomes

As chaves de símbolo permitem que bibliotecas diferentes adicionem propriedades ao mesmo objeto sem o risco de sobrescrever umas às outras, pois os símbolos delas são diferentes.

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

Chaves de símbolo e espalhamento

O operador de espalhamento de objeto também copia as chaves de símbolo, ao contrário de for-in e Object.keys. Portanto, tenha em mente que elas são transferidas ao clonar.

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

Armazenando dados semelhantes a privados

As chaves de símbolo oferecem uma forma flexível de privacidade: os dados só podem ser acessados pelo código que possui o símbolo, mantendo-os fora das listagens normais de propriedades.

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

Excluindo propriedades de símbolo

Você remove uma propriedade de símbolo da mesma forma que qualquer outra, usando o operador delete com a referência ao símbolo.

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

Verificação rápida

Teste seus conhecimentos sobre chaves de símbolo.

Recapitulação

Recapitulação: Os símbolos criam chaves de objeto seguras e ocultas.

  • Use colchetes para chaves de símbolo calculadas
  • Ignoradas por for-in, Object.keys e JSON
  • Listadas por meio de Object.getOwnPropertySymbols
  • Ótimas para metadados sem conflitos
const k = Symbol("k")
const o = { [k]: 7 }
console.log(o[k])

Perguntas Frequentes

A aula “Symbols como chaves de objetos” é grátis?

Sim — o texto completo de “Symbols como chaves de objetos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.

O que vou aprender em “Symbols como chaves de objetos”?

Use Symbols para propriedades sem colisões. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Symbols como chaves de objetos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando Symbols exclusivos
  2. Symbols como chaves de objetos
  3. O registro global de Symbols
  4. Symbols conhecidos
← Voltar para JavaScript Academy