Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
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 DateneigenschaftSymbol.toStringTag repräsentiert dasbekannte SymbolSymbol.toStringTag.Object.prototype.toString() sucht dieses Symbol imthis-Wert der Eigenschaft, die eine Zeichenfolge enthält, die den Typ des Objekts darstellt.
In diesem Artikel
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 SymbolSymbol.toStringTag.
Eigenschaften vonSymbol.toStringTag | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beispiele
>Standard-Tags
Einige Werte haben keinSymbol.toStringTag, aber spezielletoString()-Darstellungen. Eine vollständige Liste finden Sie unterObject.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 moreEingebaute toStringTag-Symbole
Die meisten eingebauten Objekte stellen ihre eigene[Symbol.toStringTag]-Eigenschaft bereit. Fast alle[Symbol.toStringTag]-Eigenschaften der eingebauten Objekte sind nicht beschreibbar, nicht aufzählbar und konfigurierbar; die Ausnahme istIterator, die aus Kompatibilitätsgründen beschreibbar ist.
Bei Konstruktorobjekten wiePromise wird die Eigenschaft aufConstructor.prototype installiert, sodass alle Instanzen des Konstruktors[Symbol.toStringTag] erben und als Zeichenfolge dargestellt werden können. Bei Nicht-Konstruktorobjekten wieMath undJSON wird die Eigenschaft als statische Eigenschaft installiert, sodass das Namensraum-Objekt selbst als Zeichenfolge dargestellt werden kann. Manchmal stellt der Konstruktor auch seine eigenetoString-Methode bereit (zum BeispielIntl.Locale), in welchem Fall die[Symbol.toStringTag]-Eigenschaft nur verwendet wird, wenn Sie explizitObject.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 moreBenutzerdefiniertes Tag mit toStringTag
Beim Erstellen Ihrer eigenen Klasse verwendet JavaScript standardmäßig das "Object"-Tag:
class ValidatorClass {}Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"Nun, mit Hilfe vontoStringTag 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-Prototypenobjekten
Aufgrund einerWebIDL-Spezifikationsänderung in der Mitte des Jahres 2020 fügen Browser eineSymbol.toStringTag-Eigenschaft zu allen DOM-Prototypenobjekten hinzu. Um zum Beispiel dieSymbol.toStringTag-Eigenschaft aufHTMLButtonElement zuzugreifen:
const test = document.createElement("button");test.toString(); // "[object HTMLButtonElement]"test[Symbol.toStringTag]; // "HTMLButtonElement"Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol.tostringtag> |