Symbol.toStringTag
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2017 browserübergreifend verfügbar.
Die statische Dateneigenschaft Symbol.toStringTag repräsentiert das wohlbekannte Symbol Symbol.toStringTag. Object.prototype.toString() sucht auf dem this-Wert nach diesem Symbol, um den String abzurufen, der den Typ des Objekts beschreibt.
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 wohlbekannte Symbol Symbol.toStringTag.
Eigenschaften von Symbol.toStringTag | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beispiele
>Standard-Tags
Einige Werte haben kein Symbol.toStringTag, besitzen aber spezielle toString()-Darstellungen. Eine vollständige Liste finden Sie unter 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
Integrierte toStringTag-Symbole
Die meisten integrierten Objekte stellen eine eigene [Symbol.toStringTag]-Eigenschaft bereit. Bei fast allen integrierten Objekten ist diese Eigenschaft nicht beschreibbar, nicht aufzählbar und konfigurierbar. Eine Ausnahme bildet Iterator: Aus Kompatibilitätsgründen ist die Eigenschaft dort beschreibbar.
Bei Konstruktorobjekten wie Promise wird die Eigenschaft auf Constructor.prototype definiert. Dadurch erben alle Instanzen des Konstruktors [Symbol.toStringTag] und können in einen String umgewandelt werden. Bei Objekten, die keine Konstruktoren sind, wie Math und JSON, wird die Eigenschaft als statische Eigenschaft definiert, sodass das Namespace-Objekt selbst in einen String umgewandelt werden kann. Manchmal stellt der Konstruktor auch eine eigene toString-Methode bereit (beispielsweise Intl.Locale). In diesem Fall wird die [Symbol.toStringTag]-Eigenschaft nur verwendet, wenn Sie Object.prototype.toString ausdrücklich 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 eine eigene Klasse erstellen, verwendet JavaScript standardmäßig das Tag „Object“:
class ValidatorClass {}
Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
Mithilfe von toStringTag können Sie ein eigenes Tag festlegen:
class ValidatorClass {
get [Symbol.toStringTag]() {
return "Validator";
}
}
Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
toStringTag auf allen DOM-Prototypobjekten verfügbar
Aufgrund einer Änderung der WebIDL-Spezifikation Mitte 2020 fügen Browser allen DOM-Prototypobjekten eine Symbol.toStringTag-Eigenschaft hinzu. So greifen Sie beispielsweise auf die Symbol.toStringTag-Eigenschaft von HTMLButtonElement zu:
const test = document.createElement("button");
test.toString(); // "[object HTMLButtonElement]"
test[Symbol.toStringTag]; // "HTMLButtonElement"
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.tostringtag> |