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
- Criando Symbols exclusivos
- Symbols como chaves de objetos
- O registro global de Symbols
- Symbols conhecidos