Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Symbol.toPrimitive
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.
Die statische DateneigenschaftSymbol.toPrimitive repräsentiert dasbekannte SymbolSymbol.toPrimitive. AlleTypumwandlungs-Algorithmen suchen dieses Symbol in Objekten nach der Methode, die einen bevorzugten Typ akzeptiert und eine primitive Darstellung des Objekts zurückgibt, bevor sie auf die Verwendung dervalueOf()- undtoString()-Methoden des Objekts zurückfallen.
In diesem Artikel
Probieren Sie es aus
const object = { [Symbol.toPrimitive](hint) { if (hint === "number") { return 42; } return null; },};console.log(+object);// Expected output: 42Wert
Das bekannte SymbolSymbol.toPrimitive.
Eigenschaften vonSymbol.toPrimitive | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beschreibung
Mit Hilfe derSymbol.toPrimitive-Eigenschaft (verwendet als Funktionswert) kann ein Objekt in einen primitiven Wert umgewandelt werden. Die Funktion wird mit einem String-Argumenthint aufgerufen, das den bevorzugten Typ des resultierenden primitiven Werts angibt. Dashint-Argument kann eine der folgenden ist:"number","string" und"default".
Der"number"-Hinweis wird vonnumerischen Umwandlungsalgorithmen verwendet. Der"string"-Hinweis wird vomString-Umwandlungsalgorithmus verwendet. Der"default"-Hinweis wird vomprimitiven Umwandlungsalgorithmus verwendet. Derhint dient nur als schwaches Präferenzsignal, und die Implementierung kann ihn ignorieren (wie esSymbol.prototype[Symbol.toPrimitive]() tut). Die Sprache erzwingt keine Übereinstimmung zwischen demhint und dem Ergebnistyp, obwohl[Symbol.toPrimitive]() ein primitiver Wert zurückgeben muss, oder einTypeError wird ausgelöst.
Objekte ohne die[Symbol.toPrimitive]-Eigenschaft werden in primitive Werte umgewandelt, indem die MethodenvalueOf() undtoString() in unterschiedlicher Reihenfolge aufgerufen werden, was im Abschnitt überTypumwandlung ausführlicher erklärt wird.[Symbol.toPrimitive]() ermöglicht die vollständige Kontrolle über den Umwandlungsprozess in primitive Werte. Zum Beispiel behandeltDate.prototype[Symbol.toPrimitive]()"default" so, als wäre es"string" und rufttoString() stattvalueOf() auf.Symbol.prototype[Symbol.toPrimitive]() ignoriert den Hinweis und gibt immer ein Symbol zurück, was bedeutet, dass auch in String-KontextenSymbol.prototype.toString() nicht aufgerufen wird, undSymbol-Objekte müssen immer explizit überString() in Strings umgewandelt werden.
Beispiele
>Modifizieren primitiver Werte, die aus einem Objekt umgewandelt wurden
Das folgende Beispiel beschreibt, wie dieSymbol.toPrimitive-Eigenschaft den primitiven Wert, der aus einem Objekt umgewandelt wurde, modifizieren kann.
// An object without Symbol.toPrimitive property.const obj1 = {};console.log(+obj1); // NaNconsole.log(`${obj1}`); // "[object Object]"console.log(obj1 + ""); // "[object Object]"// An object with Symbol.toPrimitive property.const obj2 = { [Symbol.toPrimitive](hint) { if (hint === "number") { return 10; } if (hint === "string") { return "hello"; } return true; },};console.log(+obj2); // 10 — hint is "number"console.log(`${obj2}`); // "hello" — hint is "string"console.log(obj2 + ""); // "true" — hint is "default"Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol.toprimitive> |