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 Daten-Eigenschaft Symbol.toStringTag
repräsentiert das bekannte Symbol Symbol.toStringTag
. Object.prototype.toString()
sucht dieses Symbol im this
Wert auf, für die Eigenschaft, die einen String enthält, der den Typ des Objekts darstellt.
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. 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
Eingebaute toStringTag-Symbole
Die meisten eingebauten Objekte bieten ihre eigene [Symbol.toStringTag]
-Eigenschaft. Fast alle [Symbol.toStringTag]
-Eigenschaften der eingebauten Objekte sind nicht beschreibbar, nicht aufzählbar und konfigurierbar; die Ausnahme ist Iterator
, die aus Kompatibilitätsgründen beschreibbar ist.
Für Konstruktorobjekte wie Promise
wird die Eigenschaft auf Constructor.prototype
installiert, sodass alle Instanzen des Konstruktors [Symbol.toStringTag]
erben und als String dargestellt werden können. Für Nicht-Konstruktorobjekte wie Math
und JSON
wird die Eigenschaft als statische Eigenschaft installiert, sodass das Namespace-Objekt selbst als String dargestellt werden kann. Manchmal bietet der Konstruktor auch seine eigene toString
-Methode (zum Beispiel 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 können Sie mit Hilfe von toStringTag
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 Änderung in der WebIDL-Spezifikation Mitte 2020, fügen Browser eine Symbol.toStringTag
-Eigenschaft zu allen DOM-Prototyp-Objekten hinzu. Um beispielsweise auf 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 |