Object.prototype.toString()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
DietoString()
Methode vonObject
Instanzen gibt eine Zeichenkette zurück, die dieses Objekt darstellt. Diese Methode soll von abgeleiteten Objekten für benutzerdefinierteTypumwandlungslogik überschrieben werden.
Probieren Sie es aus
const map = new Map();console.log(map.toString());// Expected output: "[object Map]"
Syntax
toString()
Parameter
Standardmäßig nimmttoString()
keine Parameter. Jedoch können Objekte, die vonObject
erben, sie mit eigenen Implementierungen überschreiben, die Parameter akzeptieren. Zum Beispiel nehmen die MethodenNumber.prototype.toString()
undBigInt.prototype.toString()
einen optionalenradix
Parameter.
Rückgabewert
Eine Zeichenkette, die das Objekt darstellt.
Beschreibung
JavaScript ruft dietoString
Methode auf, umein Objekt in einen primitiven Wert zu konvertieren. In der Regel müssen Sie dietoString
Methode nicht selbst aufrufen; JavaScript ruft sie automatisch auf, wenn ein Objekt gefunden wird, wo ein primitiver Wert erwartet wird.
Diese Methode wird vorrangig bei derZeichenkettenkonvertierung aufgerufen, aber dienumerische Konvertierung undprimitive Konvertierung rufenvalueOf()
vorrangig auf. Da die Basis-MethodevalueOf()
jedoch ein Objekt zurückgibt, wird normalerweise dietoString()
Methode aufgerufen, es sei denn, das Objekt überschreibtvalueOf()
. Zum Beispiel gibt+[1]
den Wert1
zurück, da seinetoString()
Methode"1"
zurückgibt, welches dann in eine Zahl umgewandelt wird.
Alle Objekte, die vonObject.prototype
erben (das heißt, alle außernull
-Prototyp Objekten) erben dietoString()
Methode. Wenn Sie ein benutzerdefiniertes Objekt erstellen, können SietoString()
überschreiben, um eine benutzerdefinierte Methode aufzurufen, sodass Ihr benutzerdefiniertes Objekt in einen Zeichenkettenwert umgewandelt werden kann. Alternativ können Sie eine Methode[Symbol.toPrimitive]()
hinzufügen, die noch mehr Kontrolle über den Konvertierungsprozess ermöglicht und immer gegenübervalueOf
odertoString
für jede Typumwandlung bevorzugt wird.
Um das Basis-Object.prototype.toString()
mit einem Objekt zu verwenden, das es überschreibt (oder um es aufnull
oderundefined
auszuführen), müssen SieFunction.prototype.call()
oderFunction.prototype.apply()
aufrufen, wobei Sie das Objekt, das Sie untersuchen möchten, als ersten Parameter (genanntthisArg
) ü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, wobeiType
der Objekttyp ist. Wenn das Objekt eineSymbol.toStringTag
Eigenschaft hat, deren Wert eine Zeichenkette ist, wird dieser Wert alsType
verwendet. Viele eingebaute Objekte, einschließlichMap
undSymbol
, haben einSymbol.toStringTag
. Einige Objekte, die vor ES6 existierten, haben keinSymbol.toStringTag
, aber dennoch einen speziellen Tag. Dazu gehören (das Tag ist der unten angegebene Typenname):
Dasarguments
Objekt gibt"[object Arguments]"
zurück. Alles andere, einschließlich benutzerdefinierter Klassen, gibt, sofern kein benutzerdefiniertesSymbol.toStringTag
vorhanden ist,"[object Object]"
zurück.
Object.prototype.toString()
aufnull
undundefined
aufgerufen, gibt[object Null]
bzw.[object Undefined]
zurück.
Beispiele
Überschreiben von toString für benutzerdefinierte Objekte
Sie können eine Funktion erstellen, die anstelle der Standard-toString()
Methode aufgerufen wird. DietoString()
Funktion, die Sie erstellen, sollte einen Zeichenkettenwert zurückgeben. Wenn sie ein Objekt zurückgibt und die Methode implizit während derTypumwandlung aufgerufen wird, wird ihr Ergebnis ignoriert und der Wert einer verwandten Methode,valueOf()
, wird stattdessen verwendet, oder es wird einTypeError
ausgelöst, wenn keine dieser Methoden einen primitiven Wert zurückgibt.
Der folgende Code definiert eineDog
-Klasse.
class Dog { constructor(name, breed, color, sex) { this.name = name; this.breed = breed; this.color = color; this.sex = sex; }}
Wenn Sie dietoString()
Methode, entweder explizit oder implizit, auf eine Instanz vonDog
aufrufen, gibt sie den Standardwert zurück, der vonObject
geerbt wurde:
const theDog = new Dog("Gabby", "Lab", "chocolate", "female");theDog.toString(); // "[object Object]"`${theDog}`; // "[object Object]"
Der folgende Code überschreibt die Standard-toString()
Methode. Diese Methode generiert eine Zeichenkette, die denname
,breed
,color
undsex
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 wird jedes Mal, wenn eine Instanz vonDog
in einem Zeichenkettenkontext verwendet wird, dietoString()
Methode automatisch von JavaScript aufgerufen.
const theDog = new Dog("Gabby", "Lab", "chocolate", "female");`${theDog}`; // "Dog Gabby is a female chocolate Lab"
Verwenden von toString() zur Erkennung von Objektklassen
toString()
kann mit jedem Objekt verwendet werden und erlaubt 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.toStringTagtoString.call(Math); // [object Math]toString.call(undefined); // [object Undefined]toString.call(null); // [object Null]
Die Verwendung vontoString()
auf diese Weise ist nicht zuverlässig; Objekte können das Verhalten vonObject.prototype.toString()
ändern, indem sie eineSymbol.toStringTag
Eigenschaft definieren, was zu unerwarteten Ergebnissen führen kann. 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
Specification |
---|
ECMAScript® 2026 Language Specification # sec-object.prototype.tostring |
Browser-Kompatibilität
Siehe auch
MDN-Feedback-Box
Diese Seite wurde automatisch aus dem Englischen übersetzt.