ES6 - Símbolo
Introdução ao símbolo
ES6 apresenta um novo tipo primitivo chamado Symbol. Eles são úteis para implementar metaprogramação em programas JavaScript.
Sintaxe
const mySymbol = Symbol()
const mySymbol = Symbol(stringDescription)
Um símbolo é apenas uma parte da memória na qual você pode armazenar alguns dados. Cada símbolo apontará para um local de memória diferente. Os valores retornados por um construtor Symbol () são únicos e imutáveis.
Exemplo
Vamos entender isso por meio de um exemplo. Inicialmente, criamos dois símbolos sem descrição seguidos de símbolos com a mesma descrição. Em ambos os casos, o operador de igualdade retornará falso quando os símbolos forem comparados.
<script>
const s1 = Symbol();
const s2 = Symbol();
console.log(typeof s1)
console.log(s1===s2)
const s3 = Symbol("hello");//description
const s4 = Symbol("hello");
console.log(s3)
console.log(s4)
console.log(s3==s4)
</script>
A saída do código acima será conforme mencionado abaixo -
symbol
false
Symbol(hello)
Symbol(hello)
false
Sr. Não | Descrição da Propriedade |
---|---|
1 | Symbol.for (chave) procura por símbolos existentes em um registro de símbolo com a chave fornecida e o retorna, se encontrado. Caso contrário, um novo símbolo é criado no registro de símbolo global com esta chave. |
2 | Symbol.keyFor (sym) Recupera uma chave de símbolo compartilhada do registro de símbolo global para o símbolo fornecido. |
Símbolo e classes
Um símbolo pode ser usado com classes para definir as propriedades na classe. A vantagem é que se propriedade for um símbolo conforme mostrado abaixo, a propriedade pode ser acessada fora do pacote apenas se o nome do símbolo for conhecido. Portanto, os dados são muito encapsulados quando os símbolos são usados como propriedades.
Exemplo
<script>
const COLOR = Symbol()
const MODEL = Symbol()
const MAKE = Symbol()
class Bike {
constructor(color ,make,model){
this[COLOR] = color;
this[MAKE] = make;
this[MODEL] = model;
}
}
let bike = new Bike('red','honda','cbr')
console.log(bike)
//property can be accessed ony if symbol name is known
console.log(bike[COLOR])
</script>
A saída do código acima será conforme indicado abaixo -
Bike {Symbol(): "red", Symbol(): "honda", Symbol(): "cbr"}
red