Get to know MDN better
Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.
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.
A função Symbol() retorna um valor do tipo sí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 de Symbol() é ú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 encontradas no verbete do glossário para Symbol.
O tipo de dado símbolo é um tipo de dado primitivo.
String opcional. Uma descrição de símbolo no qual pode ser usado para debugar, mas não para acessar o próprio símbolo.
Para criar um novo símbolo primitivo, simplesmente escreva Symbol() com uma string opcional para sua descrição:
O código acima cria três símbolos novos. Note que a função Symbol("foo") não faz a string "foo" ser um símbolo. Ela cria um novo símbolo a cada vez que é chamada:
A sintaxe a seguir com o operador new vai resultar em um TypeError:
Isso evita que os autores criem um objeto empacotador explícito de Symbol 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 e new Number).
Se você realmente quiser criar um objeto empacotador de Symbol, você pode usar a função Object():
A sintaxe acima usando a função Symbol() 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étodos Symbol.for() e Symbol.keyFor() para definir e configurar símbolos no registro global de símbolo.
O método Object.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.
Propriedade de tamanho cujo valor é 1.
Symbol.prototypeRepresenta o protótipo do Symbol construtor.
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.hasInstanceEspecificado 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.isConcatSpreadableEspecificado como @@isConcatSpreadable. Um valor Booleano indicando se um objeto deve ser adicionado como elemento de uma array. Usado por Array.prototype.concat().
Symbol.isRegExpEspecificado como @@isRegExp. Um valor Booleano indicando se um objeto pode ser usado como uma expressão regular.
Symbol.iteratorEspecificado como @@iterator. Um método retornando o iterador padrão para um objeto. Usado por for...of.
Symbol.toPrimitiveEspecificado como @@toPrimitive. Um método convertendo um objeto para um valor primitivo.
Symbol.toStringTagEspecificado como @@toStringTag. Um valor string usado para descrição padrão de um objeto. Usado por Object.prototype.toString()
Symbol.unscopablesEspecificado como @@unscopables. Uma Array com valores string que são valores propriedade. Esses são excluídos das ligações com o objeto associado.
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.
Todos os símbolos herdados de Symbol.prototype.
O operador typeof pode ajudar a identificar os símbolos.
Algumas anotações quando trabalhando com conversão de tipo de símbolos.
Símbolos não são visíveis em for...in iterações. Além de, Object.getOwnPropertyNames() não retornará propriedades do objeto símbolo, entretanto, você pode fazer uso do Object.getOwnPropertySymbols() para conseguir esses resultados.
Propriedade com chave de símbolo vão ser completamente ignoradas quando usando JSON.stringify():
Para mais detalhes, veja JSON.stringify().
Quando um objeto wrapper de um símbolo é usado como uma chave de propriedade, esse objeto será coerced para o seu símbolo wrapper:
| ECMAScript® 2027 Language Specification # sec-symbol-objects |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 27 de abr. de 2025 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.