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 April 2017.
Die statische Dateneigenschaft Symbol.toStringTag
repräsentiert das bekannte Symbol Symbol.toStringTag
. Object.prototype.toString()
sucht dieses Symbol im this
-Wert nach der Eigenschaft, die einen String enthält, der den Typ des Objekts repräsentiert.
Probieren Sie es aus
class ValidatorClass {
get [Symbol.toStringTag]() {
return "Validator";
}
}
console.log(Object.prototype.toString.call(new ValidatorClass()));
// Expected output: "[object Validator]"
Wert
Das bekannte Symbol Symbol.toStringTag
.
Eigenschaften von Symbol.toStringTag | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beispiele
Standard-Tags
Einige Werte haben kein Symbol.toStringTag
, aber spezielle toString()
-Darstellungen. Für eine vollständige Liste siehe Object.prototype.toString()
.
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
Eingebaute toStringTag-Symbole
Die meisten eingebauten Objekte stellen ihre eigene [Symbol.toStringTag]
-Eigenschaft bereit. Bei fast allen eingebauten Objekten ist die [Symbol.toStringTag]
-Eigenschaft nicht beschreibbar, nicht aufzählbar und konfigurierbar; die Ausnahme ist Iterator
, welches aus Kompatibilitätsgründen beschreibbar ist.
Bei Konstruktorobjekten wie Promise
wird die Eigenschaft auf Constructor.prototype
installiert, sodass alle Instanzen des Konstruktors [Symbol.toStringTag]
erben und als String dargestellt werden können. Bei Nicht-Konstruktorobjekten wie Math
und JSON
wird die Eigenschaft als statische Eigenschaft installiert, sodass das Namensraumobjekt selbst als String dargestellt werden kann. Manchmal stellt der Konstruktor auch seine eigene toString
-Methode bereit (z. B. Intl.Locale
). In diesem Fall wird die [Symbol.toStringTag]
-Eigenschaft nur verwendet, wenn Sie explizit Object.prototype.toString
darauf aufrufen.
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
Benutzerdefiniertes Tag mit toStringTag
Wenn Sie Ihre eigene Klasse erstellen, verwendet JavaScript standardmäßig das "Object"-Tag:
class ValidatorClass {}
Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
Jetzt, mit Hilfe von toStringTag
, können Sie Ihr eigenes benutzerdefiniertes Tag festlegen:
class ValidatorClass {
get [Symbol.toStringTag]() {
return "Validator";
}
}
Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
toStringTag verfügbar auf allen DOM-Prototyp-Objekten
Aufgrund einer WebIDL-Spezifikationsänderung Mitte 2020 fügen Browser eine Symbol.toStringTag
-Eigenschaft zu allen DOM-Prototyp-Objekten hinzu. Zum Beispiel, um die Symbol.toStringTag
-Eigenschaft auf HTMLButtonElement
zuzugreifen:
const test = document.createElement("button");
test.toString(); // "[object HTMLButtonElement]"
test[Symbol.toStringTag]; // "HTMLButtonElement"
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-symbol.tostringtag |