Object.prototype.toString()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die toString()
Methode von Object
Instanzen gibt einen String zurück, der dieses Objekt repräsentiert. Diese Methode soll von abgeleiteten Objekten überschrieben werden, um benutzerdefinierte Typerzwungen-Logik zu ermöglichen.
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 an. Objekte, die von Object
erben, können es jedoch mit eigenen Implementierungen überschreiben, die Parameter annehmen. Zum Beispiel nehmen die Methoden Number.prototype.toString()
und BigInt.prototype.toString()
einen optionalen radix
-Parameter an.
Rückgabewert
Ein String, der das Objekt repräsentiert.
Beschreibung
JavaScript ruft die toString
-Methode auf, um ein Objekt in einen primitiven Wert zu konvertieren. Sie müssen die toString
-Methode selten selbst aufrufen; JavaScript ruft sie automatisch auf, wenn ein Objekt an einer Stelle erwartet wird, an der ein primitiver Wert benötigt wird.
Diese Methode wird vorrangig durch String-Konvertierung aufgerufen, aber numerische Konvertierung und primitive Konvertierung rufen vorrangig valueOf()
auf. Da aber die Basis-Methoden valueOf()
ein Objekt zurückgeben, wird die toString()
-Methode normalerweise am Ende aufgerufen, es sei denn, das Objekt überschreibt valueOf()
. Zum Beispiel ergibt +[1]
1
, weil die toString()
-Methode "1"
zurückgibt, welche dann in eine Zahl umgewandelt wird.
Alle Objekte, die von Object.prototype
erben (das heißt, alle außer null
-Prototype-Objekte) erben die toString()
-Methode. Wenn Sie ein benutzerdefiniertes Objekt erstellen, können Sie toString()
überschreiben, um eine benutzerdefinierte Methode aufzurufen, sodass Ihr benutzerdefiniertes Objekt in einen String-Wert umgewandelt werden kann. Alternativ können Sie eine [Symbol.toPrimitive]()
-Methode hinzufügen, die noch mehr Kontrolle über den Konvertierungsprozess ermöglicht und bei jeglicher Typkonvertierung immer valueOf
oder toString
vorgezogen wird.
Um die Basis Object.prototype.toString()
mit einem Objekt zu verwenden, das es überschrieben hat (oder um es auf null
oder undefined
aufzurufen), müssen Sie Function.prototype.call()
oder Function.prototype.apply()
darauf aufrufen und das zu inspizierende Objekt als ersten Parameter (thisArg
genannt) ü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
der Objekttyp ist. Wenn das Objekt eine Symbol.toStringTag
-Eigenschaft hat, deren Wert ein String ist, wird dieser Wert als Type
verwendet. Viele eingebaute Objekte, einschließlich Map
und Symbol
, haben ein Symbol.toStringTag
. Einige Objekte, die vor ES6 existieren, haben kein Symbol.toStringTag
, aber dennoch ein spezielles Tag. Sie beinhalten (das Tag ist identisch mit dem unten angegebenen Typnamen):
Das arguments
-Objekt gibt "[object Arguments]"
zurück. Alles andere, einschließlich benutzerdefinierter Klassen, es sei denn, es gibt ein benutzerdefiniertes Symbol.toStringTag
, wird "[object Object]"
zurückgeben.
Object.prototype.toString()
aufgerufen auf null
und undefined
gibt [object Null]
und [object Undefined]
zurück, jeweils entsprechend.
Beispiele
Überschreiben von toString für benutzerdefinierte Objekte
Sie können eine Funktion erstellen, die anstelle der Standard-toString()
-Methode aufgerufen wird. Die toString()
-Funktion, die Sie erstellen, sollte einen String-Wert zurückgeben. Wenn sie ein Objekt zurückgibt und die Methode implizit während der Typkonvertierung aufgerufen wird, wird das Ergebnis ignoriert und der Wert einer verwandten Methode, valueOf()
, verwendet, oder ein TypeError
wird ausgelöst, wenn keine dieser Methoden einen primitiven Wert zurückgibt.
Der folgende Code definiert eine Dog
Klasse.
class Dog {
constructor(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
}
Wenn Sie die toString()
-Methode auf eine Instanz von Dog
entweder explizit oder implizit aufrufen, gibt sie den Standardwert zurück, der von Object
geerbt wird:
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 erzeugt einen String, der den name
, die breed
, die color
und das 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 obigen Code wird jedes Mal, wenn eine Instanz von Dog
in einem String-Kontext verwendet wird, JavaScript
automatisch die toString()
-Methode aufrufen.
const theDog = new Dog("Gabby", "Lab", "chocolate", "female");
`${theDog}`; // "Dog Gabby is a female chocolate Lab"
Verwendung von toString(), um die Objektklasse zu erkennen
toString()
kann mit jedem Objekt verwendet werden und erlaubt es Ihnen (standardmäßig), seine Klasse zu erhalten.
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]
Die Verwendung von toString()
auf diese Weise ist unzuverlässig; Objekte können das Verhalten von Object.prototype.toString()
ändern, indem sie eine Symbol.toStringTag
-Eigenschaft definieren, was zu unerwarteten Ergebnissen führt. 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 |