Baseline Widely available
Die toString()
Methode von Object
Instanzen gibt eine Zeichenkette zurück, die dieses Objekt darstellt. Diese Methode soll von abgeleiteten Objekten für benutzerdefinierte Typumwandlungslogik überschrieben werden.
const map = new Map();
console.log(map.toString());
// Expected output: "[object Map]"
Syntax Parameter
StandardmäÃig nimmt toString()
keine Parameter. Jedoch können Objekte, die von Object
erben, sie mit eigenen Implementierungen überschreiben, die Parameter akzeptieren. Zum Beispiel nehmen die Methoden Number.prototype.toString()
und BigInt.prototype.toString()
einen optionalen radix
Parameter.
Eine Zeichenkette, die das Objekt darstellt.
BeschreibungJavaScript ruft die toString
Methode auf, um ein Objekt in einen primitiven Wert zu konvertieren. In der Regel müssen Sie die toString
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 der Zeichenkettenkonvertierung aufgerufen, aber die numerische Konvertierung und primitive Konvertierung rufen valueOf()
vorrangig auf. Da die Basis-Methode valueOf()
jedoch ein Objekt zurückgibt, wird normalerweise die toString()
Methode aufgerufen, es sei denn, das Objekt überschreibt valueOf()
. Zum Beispiel gibt +[1]
den Wert 1
zurück, da seine toString()
Methode "1"
zurückgibt, welches dann in eine Zahl umgewandelt wird.
Alle Objekte, die von Object.prototype
erben (das heiÃt, alle auÃer null
-Prototyp Objekten) 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 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über valueOf
oder toString
für jede Typumwandlung bevorzugt wird.
Um das Basis-Object.prototype.toString()
mit einem Objekt zu verwenden, das es überschreibt (oder um es auf null
oder undefined
auszuführen), müssen Sie Function.prototype.call()
oder Function.prototype.apply()
aufrufen, wobei Sie das Objekt, das Sie untersuchen möchten, als ersten Parameter (genannt 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
der Objekttyp ist. Wenn das Objekt eine Symbol.toStringTag
Eigenschaft hat, deren Wert eine Zeichenkette ist, wird dieser Wert als Type
verwendet. Viele eingebaute Objekte, einschlieÃlich Map
und Symbol
, haben ein Symbol.toStringTag
. Einige Objekte, die vor ES6 existierten, haben kein Symbol.toStringTag
, aber dennoch einen speziellen Tag. Dazu gehören (das Tag ist der unten angegebene Typenname):
Array
Function
(alles, dessen typeof
"function"
zurückgibt)Error
Boolean
Number
String
Date
RegExp
Das arguments
Objekt gibt "[object Arguments]"
zurück. Alles andere, einschlieÃlich benutzerdefinierter Klassen, gibt, sofern kein benutzerdefiniertes Symbol.toStringTag
vorhanden ist, "[object Object]"
zurück.
Object.prototype.toString()
auf null
und undefined
aufgerufen, gibt [object Null]
bzw. [object Undefined]
zurück.
Sie können eine Funktion erstellen, die anstelle der Standard-toString()
Methode aufgerufen wird. Die toString()
Funktion, die Sie erstellen, sollte einen Zeichenkettenwert zurückgeben. Wenn sie ein Objekt zurückgibt und die Methode implizit während der Typumwandlung aufgerufen wird, wird ihr Ergebnis ignoriert und der Wert einer verwandten Methode, valueOf()
, wird stattdessen verwendet, oder es wird ein TypeError
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, entweder explizit oder implizit, auf eine Instanz von Dog
aufrufen, gibt sie den Standardwert zurück, der von Object
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 den 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 wird jedes Mal, wenn eine Instanz von Dog
in einem Zeichenkettenkontext verwendet wird, die toString()
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.toStringTag
toString.call(Math); // [object Math]
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
Die Verwendung von toString()
auf diese Weise ist nicht zuverlässig; Objekte können das Verhalten von Object.prototype.toString()
ändern, indem sie eine Symbol.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 Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4