Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Símbolo
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since setembro de 2015.
* Some parts of this feature may have varying levels of support.
Sumário
A funçãoSymbol() retorna um valor do tiposímbolo (symbol), tem propriedades estáticas que expõem vários membros dos objetos nativos, possuem métodos estáticos que expõem o registro de símbolos globais e se parecem com uma classe de objeto nativo, mas estão incompletos como construtor porque não suportam a sintaxe "new Symbol()".
Cada valor símbolo retornado deSymbol() é único. Um símbolo pode ser usado como o identificador para propriedades de objetos; esse é o único propósito do tipo de dado. Algumas explicações sobre propósito e uso podem ser encontradasno verbete do glossário para Symbol.
O tipo de dadosímbolo é umtipo de dado primitivo.
In this article
Sintaxe
Symbol([descrição])
Parâmetros
descriçãoOptionalString opcional. Uma descrição de símbolo no qual pode ser usado para debugar, mas não para acessar o próprio símbolo.
Descrição
Para criar um novo símbolo primitivo, simplesmente escrevaSymbol() com uma string opcional para sua descrição:
var sym1 = Symbol();var sym2 = Symbol("foo");var sym3 = Symbol("foo");O código acima cria três símbolos novos. Note que a funçãoSymbol("foo") não faz a string"foo" ser um símbolo. Ela cria um novo símbolo a cada vez que é chamada:
Symbol("foo") === Symbol("foo"); // falseA sintaxe a seguir com o operadornew vai resultar em umTypeError:
var sym = new Symbol(); // TypeErrorIsso evita que os autores criem um objeto empacotador explícito deSymbol em vez de um novo valor de símbolo. O que pode surpreender, pois, geralmente é possível criar objetos empacotadores explícitos em torno de tipos de dados primitivos (por exemplo,new Boolean,new String enew Number).
Se você realmente quiser criar um objeto empacotador deSymbol, você pode usar a funçãoObject():
var sym = Symbol("foo");typeof sym; // "symbol"var symObj = Object(sym);typeof symObj; // "object"Símbolos compartilhados no registro global de símbolo
A sintaxe acima usando a funçãoSymbol() não criará um símbolo global que estará disponível em todo o seu código. Para criar símbolos disponíveis em vários arquivos em um escopo como se fosse global, use os métodosSymbol.for() eSymbol.keyFor() para definir e configurar símbolos no registro global de símbolo.
Encontrando propriedades de símbolos em objetos
O métodoObject.getOwnPropertySymbols() retorna um array de símbolos e permite que você encontre propriedades de símbolos em um determinado objeto. Observe que cada objeto é inicializado sem suas próprias propriedades de símbolo, de modo que este array estará vazio, a menos que você estabeleça propriedades de símbolo no objeto.
Propriedades
Symbol.lengthPropriedade de tamanho cujo valor é 1.
Symbol.prototypeRepresenta o protótipo do
Symbolconstrutor.
Símbolos conhecidos
Em adição para seus próprios símbolos, JavaScript possui alguns símbolos built-in que representa os comportamentos internos da linguagem que não foram revelados para os desenvolvedores no ECMAScript 5 e anterior. Esses símbolos podem ser acessados usando as seguintes propriedades:
- Symbol.hasInstance
Especificado como @@hasInstance. Um método que determina se um construtor de um objeto é reconhecido como a instância de um objeto. Usado por
instanceof.- Symbol.isConcatSpreadable
Especificado como @@isConcatSpreadable. Um valor Booleano indicando se um objeto deve ser adicionado como elemento de uma array. Usado por
Array.prototype.concat().- Symbol.isRegExp
Especificado como @@isRegExp. Um valor Booleano indicando se um objeto pode ser usado como uma expressão regular.
- Symbol.iterator
Especificado como @@iterator. Um método retornando o iterador padrão para um objeto. Usado por
for...of.- Symbol.toPrimitive
Especificado como @@toPrimitive. Um método convertendo um objeto para um valor primitivo.
- Symbol.toStringTag
Especificado como @@toStringTag. Um valor string usado para descrição padrão de um objeto. Usado por
Object.prototype.toString()- Symbol.unscopables
Especificado como @@unscopables. Uma Array com valores string que são valores propriedade. Esses são excluídos das ligações com o objeto associado.
Métodos
Symbol.for(key)Procura por símbolos existentes com as chaves dada e retorna as chaves se forem encontradas. Caso contrário um novo símbolo será criado no registro de símbolo global com essa chave.
Symbol.keyFor(sym)Retorna um símbolo compartilhado do registro global de símbolo para o símbolo dado.
Symbol protótipo
Todos os símbolos herdados deSymbol.prototype.
Propriedades
Métodos
Exemplos
>Usando o operadortypeof com símbolos
O operadortypeof pode ajudar a identificar os símbolos.
typeof Symbol() === "symbol";typeof Symbol("foo") === "symbol";typeof Symbol.iterator === "symbol";Conversões de tipos de símbolos
Algumas anotações quando trabalhando com conversão de tipo de símbolos.
- Quando estiver tentando converter um símbolo para um número, um
TypeErrorserá retornado.(e.g.+symorsym | 0). - Quando usando operador de igualdade,
Object(sym) == symretornatrue. Symbol("foo") + "bar"lança umTypeError(não pode converter um símbolo para string). Isso previne você de silenciosamente criar um novo nome de propriedade string a partir de um símbolo, por exemplo.- A"safer"
String(sym)conversion funciona como uma chamada paraSymbol.prototype.toString()com símbolos, mas note que umanew String(sym)será lançada.
Símbolos efor...in iteração
Símbolos não são visíveis emfor...in iterações. Além de,Object.getOwnPropertyNames() não retornará propriedades do objeto símbolo, entretanto, você pode fazer uso doObject.getOwnPropertySymbols() para conseguir esses resultados.
var obj = {};obj[Symbol("a")] = "a";obj[Symbol.for("b")] = "b";obj["c"] = "c";obj.d = "d";for (var i in obj) { console.log(i); // logs "c" and "d"}Símbolos eJSON.stringify()
Propriedade com chave de símbolo vão ser completamente ignoradas quando usandoJSON.stringify():
JSON.stringify({ [Symbol("foo")]: "foo" });// '{}'Para mais detalhes, vejaJSON.stringify().
Objeto wrapper de símbolo como chave de propriedade
Quando um objeto wrapper de um símbolo é usado como uma chave de propriedade, esse objeto será coerced para o seu símbolo wrapper:
var sym = Symbol("foo");var obj = { [sym]: 1 };obj[sym]; // 1obj[Object(sym)]; // still 1Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol-objects> |
Compatibilidade com navegadores
Loading…