Oi, Rafael! Tudo bem?
Que legal que você está se aprofundando no tipo Symbol
!
O tipo Symbol
em JavaScript é utilizado para criar identificadores únicos. Isso é muito útil quando você quer garantir que uma propriedade de um objeto não conflite com outras propriedades, mesmo que tenham o mesmo nome. Vamos ver um exemplo:
// Criando Symbols
const sym1 = Symbol('descricao1');
const sym2 = Symbol('descricao2');
// Mesmo que a descrição seja a mesma, os Symbols são únicos
const sym3 = Symbol('descricao1');
console.log(sym1 === sym2); // false
console.log(sym1 === sym3); // false
// Usando Symbols como propriedades de um objeto
const meuObjeto = {
[sym1]: 'Valor para sym1',
[sym2]: 'Valor para sym2',
nome: 'Objeto de exemplo'
};
console.log(meuObjeto[sym1]); // 'Valor para sym1'
console.log(meuObjeto[sym2]); // 'Valor para sym2'
console.log(meuObjeto.nome); // 'Objeto de exemplo'
// Symbols não aparecem em loops de iteração padrão
for (let chave in meuObjeto) {
console.log(chave); // Apenas 'nome' será exibido
}
// Mas você pode acessar as propriedades Symbol usando Object.getOwnPropertySymbols
const symbols = Object.getOwnPropertySymbols(meuObjeto);
console.log(symbols); // [ Symbol(descricao1), Symbol(descricao2) ]
Neste exemplo, criamos três Symbols, sendo dois com a mesma descrição. Mesmo assim, eles são únicos e não iguais (sym1 !== sym3
). Em seguida, utilizamos esses Symbols como chaves de propriedades em um objeto. Note que ao iterar sobre o objeto com um for...in
, as propriedades Symbol não aparecem, o que ajuda a proteger essas propriedades de modificações acidentais.
Um caso de uso comum para Symbols é quando você está desenvolvendo uma biblioteca ou framework e quer garantir que algumas propriedades internas não sejam sobrescritas ou acessadas diretamente pelo usuário da biblioteca.
Espero ter ajudado.
Um abraço e bons estudos.