Object.prototype.toString()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die Methode toString() von Object-Instanzen gibt einen String zurück, der dieses Objekt repräsentiert. Die Methode ist dafür vorgesehen, von abgeleiteten Objekten überschrieben zu werden, um eine eigene Logik für die Typumwandlung bereitzustellen.
Probieren Sie es aus
const map = new Map();
console.log(map.toString());
// Expected output: "[object Map]"
Syntax
toString()
Parameter
Standardmäßig nimmt toString() keine Parameter entgegen. Objekte, die von Object erben, können die Methode jedoch mit eigenen Implementierungen überschreiben, die Parameter entgegennehmen. Beispielsweise akzeptieren die Methoden Number.prototype.toString() und BigInt.prototype.toString() einen optionalen Parameter radix.
Rückgabewert
Ein String, der das Objekt repräsentiert.
Beschreibung
JavaScript ruft die Methode toString auf, um ein Objekt in einen primitiven Wert umzuwandeln. Sie müssen die Methode toString nur selten selbst aufrufen; JavaScript ruft sie automatisch auf, wenn an einer Stelle, an der ein primitiver Wert erwartet wird, ein Objekt vorkommt.
Bei der Umwandlung in einen String wird diese Methode bevorzugt aufgerufen, während bei der Umwandlung in eine Zahl und der Umwandlung in einen primitiven Wert valueOf() bevorzugt aufgerufen wird. Da die grundlegende Methode valueOf() jedoch ein Objekt zurückgibt, wird in der Regel schließlich toString() aufgerufen, sofern das Objekt valueOf() nicht überschreibt. Beispielsweise gibt +[1] den Wert 1 zurück, weil die Methode toString() des Arrays "1" zurückgibt, was anschließend in eine Zahl umgewandelt wird.
Alle Objekte, die von Object.prototype erben (also alle außer Objekten mit einem null-Prototyp), erben die Methode toString(). Wenn Sie ein eigenes Objekt erstellen, können Sie toString() überschreiben, sodass bei der Umwandlung Ihres Objekts in einen String Ihre eigene Methode aufgerufen wird. Alternativ können Sie eine Methode [Symbol.toPrimitive]() hinzufügen. Sie bietet noch mehr Kontrolle über die Umwandlung und wird bei jeder Typumwandlung stets gegenüber valueOf und toString bevorzugt.
Um die grundlegende Methode Object.prototype.toString() für ein Objekt zu verwenden, das sie überschrieben hat (oder um sie für null oder undefined aufzurufen), müssen Sie Function.prototype.call() oder Function.prototype.apply() darauf aufrufen und das zu untersuchende Objekt als ersten Parameter (namens thisArg) übergeben.
const arr = [1, 2, 3];
arr.toString(); // "1,2,3"
Object.prototype.toString.call(arr); // "[object Array]"
Object.prototype.toString() gibt "[object Type]" zurück, wobei Type den Objekttyp bezeichnet. Wenn das Objekt eine Eigenschaft Symbol.toStringTag besitzt, deren Wert ein String ist, wird dieser Wert als Type verwendet. Viele integrierte Objekte, darunter Map und Symbol, besitzen eine Eigenschaft Symbol.toStringTag. Einige Objekte, die schon vor ES6 existierten, haben keine Eigenschaft Symbol.toStringTag, aber dennoch eine besondere Kennzeichnung. Dazu gehören (die Kennzeichnung entspricht jeweils dem unten angegebenen Typnamen):
ArrayFunction(alles, für dastypeof"function"zurückgibt)ErrorBooleanNumberStringDateRegExp
Für das Objekt arguments wird "[object Arguments]" zurückgegeben. Für alles andere, einschließlich benutzerdefinierter Klassen, wird "[object Object]" zurückgegeben, sofern kein eigenes Symbol.toStringTag vorhanden ist.
Wird Object.prototype.toString() für null oder undefined aufgerufen, gibt die Methode [object Null] beziehungsweise [object Undefined] zurück.
Beispiele
>toString für eigene Objekte überschreiben
Sie können eine Funktion erstellen, die anstelle der standardmäßigen Methode toString() aufgerufen wird. Die von Ihnen erstellte Funktion toString() sollte einen String zurückgeben. Gibt sie ein Objekt zurück und wird die Methode während einer Typumwandlung implizit aufgerufen, wird ihr Ergebnis ignoriert und stattdessen der Rückgabewert der zugehörigen Methode valueOf() verwendet. Gibt auch diese keinen primitiven Wert zurück, wird ein TypeError ausgelöst.
Der folgende Code definiert eine Klasse Dog.
class Dog {
constructor(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
}
Wenn Sie die Methode toString() für eine Instanz von Dog explizit oder implizit aufrufen, gibt sie den von Object geerbten Standardwert zurück:
const theDog = new Dog("Gabby", "Lab", "chocolate", "female");
theDog.toString(); // "[object Object]"
`${theDog}`; // "[object Object]"
Der folgende Code überschreibt die standardmäßige Methode toString(). Diese Methode erzeugt einen String, der name, breed, color und sex des Objekts enthält.
class Dog {
constructor(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
toString() {
return `Dog ${this.name} is a ${this.sex} ${this.color} ${this.breed}`;
}
}
Mit dem vorstehenden Code ruft JavaScript jedes Mal automatisch die Methode toString() auf, wenn eine Instanz von Dog in einem String-Kontext verwendet wird.
const theDog = new Dog("Gabby", "Lab", "chocolate", "female");
`${theDog}`; // "Dog Gabby is a female chocolate Lab"
Mit toString() die Objektklasse ermitteln
toString() kann für jedes Objekt verwendet werden und ermöglicht es Ihnen (standardmäßig), dessen Klasse zu ermitteln.
const toString = Object.prototype.toString;
toString.call(new Date()); // [object Date]
toString.call(new String()); // [object String]
// Math has its Symbol.toStringTag
toString.call(Math); // [object Math]
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
toString() auf diese Weise zu verwenden, ist unzuverlässig: Objekte können das Verhalten von Object.prototype.toString() ändern, indem sie eine Eigenschaft Symbol.toStringTag definieren. Das kann zu unerwarteten Ergebnissen führen. Zum Beispiel:
const myDate = new Date();
Object.prototype.toString.call(myDate); // [object Date]
myDate[Symbol.toStringTag] = "myDate";
Object.prototype.toString.call(myDate); // [object myDate]
Date.prototype[Symbol.toStringTag] = "prototype polluted";
Object.prototype.toString.call(new Date()); // [object prototype polluted]
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.tostring> |