From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/global_objects/symbol/index.html | 301 +++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 files/pt-br/web/javascript/reference/global_objects/symbol/index.html (limited to 'files/pt-br/web/javascript/reference/global_objects/symbol/index.html') diff --git a/files/pt-br/web/javascript/reference/global_objects/symbol/index.html b/files/pt-br/web/javascript/reference/global_objects/symbol/index.html new file mode 100644 index 0000000000..f4414ffe16 --- /dev/null +++ b/files/pt-br/web/javascript/reference/global_objects/symbol/index.html @@ -0,0 +1,301 @@ +--- +title: Símbolo +slug: Web/JavaScript/Reference/Global_Objects/Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +
{{JSRef("Global_Objects", "Symbol")}}
+ +

Sumário

+ +

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 {{Glossary("Symbol", "no verbete do glossário para Symbol")}}.

+ +

O tipo de dado símbolo é um {{Glossary("Primitive", "tipo de dado primitivo")}}.

+ +

Sintaxe

+ +
Symbol([descrição])
+ +

Parametros

+ +
+
descrição {{optional_inline}}
+
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.
+
+ +

Descrição

+ +

Para criar um novo simbolo primitivo, simplesmente escreva Symbol() com uma string opçional para sua descrição:

+ +
var sym1 = Symbol();
+var sym2 = Symbol("foo");
+var sym3 = Symbol("foo");
+
+ +

O codigo acima cria três simbolos novos. Note que a função Symbol("foo") não faz a string "foo" ser um símbolo. Ela cria um novo simbolo a cada vez que é chamada:

+ +
Symbol("foo") === Symbol("foo"); // false
+ +

A sintaxe a seguir com o operador {{jsxref("Operators/new", "new")}} vai resultar em um  {{jsxref("TypeError")}}:

+ +
var sym = new Symbol(); // 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():

+ +
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çã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 {{jsxref("Symbol.for()")}} e {{jsxref("Symbol.keyFor()")}} para definir e configurar símbolos no registro global de símbolo.

+ +

Encontrando propriedades de símbolos em objetos

+ +

O método {{jsxref("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.

+ +

Propriedades

+ +
+
Symbol.length
+
Propriedade de tamanho cujo valor é 1.
+
{{jsxref("Symbol.prototype")}}
+
Representa o protótipo do Symbol construtor.
+
+ +

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 instancia de um objeto. Usado por {{jsxref("Operators/instanceof", "instanceof")}}.
+
Symbol.isConcatSpreadable
+
Especificado como @@isConcatSpreadable. Um valor Booleano indicando se um objeto deve ser adicionado como elemento de uma array. Usado por {{jsxref("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 {{jsxref("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

+ +
+
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
+
Procura por símbolos existentes com as chaves dada e retorna as chaves se for encontradas. Caso contrário um novo símbolo vai ser criado no registro de símbolo global com essa chave.
+
{{jsxref("Symbol.keyFor", "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 de {{jsxref("Symbol.prototype")}}.

+ +

Propriedades

+ +

{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Properties')}}

+ +

Métodos

+ +

{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Methods')}}

+ +

Exemplos

+ +

Usando o typeof operador com símbolos

+ +

O {{jsxref("Operators/typeof", "typeof")}} operador pode ajudar a identificar os símbolos.

+ +
typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+
+ +

Conversões de tipos de símbolo

+ +

Algumas anotações quando trabalhando com conversão de tipo de símbolos.

+ + + +

Símbolos e for...in iteração

+ +

Símbolos não são visíveis em for...in iterações. Além de , {{jsxref("Object.getOwnPropertyNames()")}} não retornará o objeto símbolo propriedade, entretante, você pode fazer uso do {{jsxref("Object.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 e JSON.stringify()

+ +

Propriedade com chave de símbolo vão ser completamente ignoradas quando usando JSON.stringify():

+ +
JSON.stringify({[Symbol("foo")]: "foo"});
+// '{}'
+ +

Para mais detalhes, veja {{jsxref("JSON.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 vai ser coerced para o seu símbolo wrapper:

+ +
var sym = Symbol("foo");
+var obj = {[sym]: 1};
+obj[sym];            // 1
+obj[Object(sym)];    // still 1
+
+ +

Especificações

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ES2015')}}Definição inicial.
+ +

Compatibilidade do navegador

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(38)}}{{CompatGeckoDesktop("36.0")}}{{ CompatNo() }}25{{ CompatNo() }}
Symbol.iterator (@@iterator){{CompatChrome(38)}}{{CompatGeckoDesktop("36.0")}}{{ CompatNo() }}25{{ CompatNo() }}
Symbol.unscopables (@@unscopables){{CompatChrome(38)}}{{ CompatNo() }}{{ CompatNo() }}25 +
{{ CompatNo() }}
+
Other well-known symbols{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatNo() }}{{CompatChrome(38)}}{{ CompatGeckoMobile("36.0") }}{{ CompatNo() }}25{{ CompatNo() }}
Symbol.iterator (@@iterator){{ CompatNo() }}{{CompatChrome(38)}}{{ CompatGeckoMobile("36.0") }}{{ CompatNo() }}25{{ CompatNo() }}
+
Symbol.unscopables (@@unscopables)
+
{{ CompatNo() }}{{CompatChrome(38)}}{{ CompatUnknown() }}{{ CompatNo() }}25{{ CompatNo() }}
Other well-known symbols{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}
+
+ +

Veja também

+ + -- cgit v1.2.3-54-g00ecf