Symbol.toStringTag

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

El símbolo conocido como Symbol.toStringTag es una propiedad con valor de cadena que se utiliza en la creación de la descripción de cadena por defecto de un objeto. Se accede a ella internamente mediante el método Object.prototype.toString().

Pruébalo

class ValidatorClass {
  get [Symbol.toStringTag]() {
    return "Validator";
  }
}

console.log(Object.prototype.toString.call(new ValidatorClass()));
// Expected output: "[object Validator]"
Atributos de la propiedad Symbol.toStringTag
SobrescribirNo
NumerableNo
ConfigurableNo

Ejemplos

Etiquetas por defecto

js
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]"
// ... and more

Símbolos toStringTag integrados

js
Object.prototype.toString.call(new Map()); // "[object Map]"
Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
// ... and more

Clases personalizadas por defecto en la etiqueta objeto

Al crear su propia clase, JavaScript utiliza por defecto la etiqueta "Object":

js
class ValidatorClass {}

Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"

Etiqueta personalizada con toStringTag

Ahora, con la ayuda de toStringTag, puede establecer su propia etiqueta personalizada:

js
class ValidatorClass {
  get [Symbol.toStringTag]() {
    return "Validator";
  }
}

Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"

toStringTag disponible en todos los objetos del prototipo DOM

Debido a un cambio en las especificaciones de WebIDL a mediados de 2020, los navegadores están añadiendo una propiedad Symbol.toStringTag a todos los objetos prototipo del DOM. Por ejemplo, para acceder a la propiedad Symbol.toStringTag de HTMLButtonElement:

js
let test = document.createElement("button");
test.toString(); // Devuelve [object HTMLButtonElement]
test[Symbol.toStringTag]; // Devuelve HTMLButtonElement

Especificaciones

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.tostringtag

Compatibilidad con navegadores

BCD tables only load in the browser

Véase también