Escrito por Bruno Franco | Publicado em 28 de junho de 2024 às 08:31
No ecossistema JavaScript, existem diversos tipos de dados primitivos que todos conhecemos, que são “comuns” na maioria das linguagens, tais como number
, string
, boolean
, null
, e mais específico, undefined
. Porém, há um outro tipo que de todos é o menos explorado, sendo o Symbol
.
Introduzido no ECMAScript 2015 (ES6), o Symbol
é um tipo de dado primitivo cujo valor é único e imutável. Eles são frequentemente utilizados para identificar propriedades de objetos de forma que não haja colisões de nomes.
Para criar um Symbol
, utiliza-se a função Symbol()
:
const symbol1 = Symbol();
const symbol2 = Symbol('description');
Cada vez que Symbol()
é chamado, um valor de Symbol
único é gerado. Mesmo que dois Symbols
sejam criados com a mesma descrição, eles serão diferentes entre si:
const symbol1 = Symbol('example');
const symbol2 = Symbol('example');
console.log(symbol1 === symbol2); // false
Eles podem ser usados para evitar colisões de nomes e proporcionar um maior grau de encapsulamento e segurança, especialmente em bibliotecas e frameworks.
Ao usar Symbols
como propriedades de objetos, evita-se que essas propriedades sejam acessadas ou sobrescritas acidentalmente, já que os Symbols
são, por padrão, não enumeráveis.
let object = {};
let id = Symbol('id');
meuObjeto[id] = 12345;
console.log(object[id]); // 12345
console.log(object); // { [Symbol(id)]: 12345 }
Muitas APIs modernas, como iteradores e descritores de propriedade, utilizam Symbols
. Permitem utilizar de outras propriedades da função que podem auxiliar no desenvolvimento da aplicação, como isRegExp, iterator, hasInstance etc.
Caso queira se aprofundar, recomendo a leitura no site oficial da MDN: Símbolo.