Symbol.toStringTag
O símbolo Symbol.toStringTag
é uma propriedade com valor string que é usada para a criação de uma descrição de string de um objeto padrão. É acessado internalmente pelo método Object.prototype.toString()
.
Experimente
Property attributes of Symbol.toStringTag |
|
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
Exemplos
Tags padrões
Object.prototype.toString.call("foo"); // "[object String]"
Object.prototype.toString.call([1, 2]); // "[object Array]"
Object.prototype.toString.call(3); // "[object Number]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
// ... e mais
Símbolos built-in toStringTag
Object.prototype.toString.call(new Map()); // "[object Map]"
Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
// ... e mais
Classes personalizadas para objeto tag
Quando cria sua própria classe, o JavaScript padroniza para "Object" tag:
class ValidatorClass {}
Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
Tag costumizada com toStringTag
Agora, com a ajuda do toStringTag
, você é capaz de costumizar sua própria tag:
class ValidatorClass {
get [Symbol.toStringTag]() {
return "Validator";
}
}
Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
toStringTag disponível em todos os objetos protótipos da DOM
Devido a uma mudança nas especificações WebIDL spec change em meados de 2020, navegadores estão adicionando uma propriedade Symbol.toStringTag
para todos os objetos protótipos da DOM . Por exemplo, para acessar a propriedade Symbol.toStringTag
no HTMLButtonElement
:
let test = document.createElement("button");
test.toString(); // Retorna [object HTMLButtonElement]
test[Symbol.toStringTag]; // Retona HTMLButtonElement
Especificações
Specification |
---|
ECMAScript Language Specification # sec-symbol.tostringtag |
Compatibilidade com navegadores
BCD tables only load in the browser