Neste tutorial, você aprenderá sobre o símbolo JavaScript com a ajuda de exemplos.
Símbolo JavaScript
O JavaScript ES6 introduziu um novo tipo de dados primitivo chamado Symbol
. Os símbolos são imutáveis (não podem ser alterados) e são únicos. Por exemplo,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Embora valor1 e valor2 contenham a mesma descrição, eles são diferentes.
Criando símbolo
Você usa a Symbol()
função para criar um Symbol
. Por exemplo,
// creating symbol const x = Symbol() typeof x; // symbol
Você pode passar uma string opcional como sua descrição. Por exemplo,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Descrição do símbolo de acesso
Para acessar a descrição de um símbolo, usamos o .
operador. Por exemplo,
const x = Symbol('hey'); console.log(x.description); // hey
Adicionar símbolo como uma chave de objeto
Você pode adicionar símbolos como uma chave em um objeto usando colchetes ()
. Por exemplo,
let id = Symbol("id"); let person = ( name: "Jack", // adding symbol as a key (id): 123 // not "id": 123 ); console.log(person); // (name: "Jack", Symbol(id): 123)
Os símbolos não estão incluídos em para … no Loop
O for… in
loop não itera sobre propriedades simbólicas. Por exemplo,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Resultado
nome idade
Benefício de usar símbolos em objeto
Se o mesmo fragmento de código for usado em vários programas, é melhor usar Symbols
na chave do objeto. É porque você pode usar o mesmo nome de chave em códigos diferentes e evitar problemas de duplicação. Por exemplo,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
No programa acima, se o person
objeto também for usado por outro programa, você não gostaria de adicionar uma propriedade que pode ser acessada ou alterada por outro programa. Portanto, ao usar Symbol
, você cria uma propriedade exclusiva que pode usar.
Agora, se o outro programa também precisar usar uma propriedade chamada id , basta adicionar um símbolo chamado id
e não haverá problemas de duplicação. Por exemplo,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
No programa acima, mesmo que o mesmo nome seja usado para armazenar valores, o Symbol
tipo de dados terá um valor único.
No programa acima, se a chave da string foi usada, o programa posterior teria alterado o valor da propriedade. Por exemplo,
let person = ( name: "Jack" ); // using string as key person.id = 12; console.log(person.id); // 12 // Another program overwrites value person.id = 'Another value'; console.log(person.id); // Another value
No programa acima, o segundo user.id
substitui o valor anterior.
Métodos de Símbolos
Existem vários métodos disponíveis com o Symbol.
Método | Descrição |
---|---|
for() | Procura por símbolos existentes |
keyFor() | Retorna uma chave de símbolo compartilhada do registro de símbolo global. |
toSource() | Retorna uma string contendo a fonte do objeto Symbol |
toString() | Retorna uma string contendo a descrição do símbolo |
valueOf() | Retorna o valor primitivo do objeto Symbol. |
Exemplo: Métodos de Símbolo
// get symbol by name let sym = Symbol.for('hello'); let sym1 = Symbol.for('id'); // get name by symbol console.log( Symbol.keyFor(sym) ); // hello console.log( Symbol.keyFor(sym1) ); // id
Propriedades do símbolo
Propriedades | Descrição |
---|---|
asyncIterator | Retorna o AsyncIterator padrão para um objeto |
hasInstance | Determina se um objeto construtor reconhece um objeto como sua instância |
isConcatSpreadable | Indica se um objeto deve ser achatado para seus elementos de matriz |
iterator | Retorna o iterador padrão para um objeto |
match | Corresponde a uma string |
matchAll | Retorna um iterador que produz correspondências da expressão regular em relação a uma string |
replace | Substitui substrings correspondentes de uma string |
search | Retorna o índice dentro de uma string que corresponde à expressão regular |
split | Divide uma string nos índices que correspondem a uma expressão regular |
species | Cria objetos derivados |
toPrimitive | Converte um objeto em um valor primitivo |
toStringTag | Fornece a descrição padrão de um objeto |
description | Retorna uma string contendo a descrição do símbolo |
Exemplo: Exemplo de propriedades do símbolo
const x = Symbol('hey'); // description property console.log(x.description); // hey const stringArray = ('a', 'b', 'c'); const numberArray = (1, 2, 3); // isConcatSpreadable property numberArray(Symbol.isConcatSpreadable) = false; let result = stringArray.concat(numberArray); console.log(result); // ("a", "b", "c", (1, 2, 3))