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.
Die statische Dateneigenschaft Symbol.toStringTag
repräsentiert das wohlbekannte 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
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
, 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 stellen ihre eigene [Symbol.toStringTag]
-Eigenschaft bereit. Fast alle [Symbol.toStringTag]
-Eigenschaften von eingebauten Objekten sind nicht schreibbar, nicht aufzählbar und konfigurierbar; die Ausnahme ist Iterator
, welche aus Kompatibilitätsgründen schreibbar ist.
Bei Konstruktor-Objekten wie Promise
wird die Eigenschaft auf Constructor.prototype
installiert, sodass alle Instanzen des Konstruktors [Symbol.toStringTag]
erben und in Strings umgewandelt werden können. Bei Nicht-Konstruktor-Objekten wie Math
und JSON
wird die Eigenschaft als statische Eigenschaft installiert, sodass das Namespace-Objekt selbst in Strings umgewandelt werden kann. Manchmal stellt der Konstruktor auch seine eigene toString
-Methode bereit (zum Beispiel Intl.Locale
), in diesem Fall wird die [Symbol.toStringTag]
-Eigenschaft nur verwendet, wenn Object.prototype.toString
explizit darauf aufgerufen wird.
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
Beim Erstellen einer eigenen Klasse verwendet JavaScript standardmäßig den "Object"-Tag:
class ValidatorClass {}
Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
Nun können Sie mit 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 WebIDL-Spezifikationsänderung von Mitte 2020 fügen Browser eine Symbol.toStringTag
-Eigenschaft zu allen DOM-Prototyp-Objekten hinzu. Zum Beispiel, um auf die Symbol.toStringTag
-Eigenschaft auf HTMLButtonElement
zuzugreifen:
const test = document.createElement("button");
test.toString(); // "[object HTMLButtonElement]"
test[Symbol.toStringTag]; // "HTMLButtonElement"
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-symbol.tostringtag |
Browser-Kompatibilität
BCD tables only load in the browser