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 September 2015.
Die statische Daten-Eigenschaft Symbol.toPrimitive
repräsentiert das wohlbekannte Symbol Symbol.toPrimitive
. Alle Algorithmen zur Typumwandlung suchen auf Objekten nach diesem Symbol für die Methode, die einen bevorzugten Typ akzeptiert und eine primitive Darstellung des Objekts zurückgibt, bevor sie als Fallback die valueOf()
- und toString()
-Methoden des Objekts verwenden.
Probieren Sie es aus
Wert
Das wohlbekannte Symbol Symbol.toPrimitive
.
Eigenschaften der Symbol.toPrimitive -Property |
|
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beschreibung
Mit Hilfe der Symbol.toPrimitive
-Eigenschaft (verwendet als Funktionswert) kann ein Objekt in einen primitiven Wert umgewandelt werden. Die Funktion wird mit einem String-Argument hint
aufgerufen, das den bevorzugten Typ des resultierenden primitiven Wertes angibt. Das hint
-Argument kann einer der folgenden Werte sein: "number"
, "string"
und "default"
.
Der "number"
-Hinweis wird von numerischen Umwandlungsalgorithmen verwendet. Der "string"
-Hinweis wird von dem String-Umwandlungsalgorithmus verwendet. Der "default"
-Hinweis wird von dem primitiven Umwandlungsalgorithmus verwendet. Der hint
dient nur als schwaches Präferenzsignal, und die Implementierung kann ihn ignorieren (wie es Symbol.prototype[Symbol.toPrimitive]()
tut). Die Sprache erzwingt keine Übereinstimmung zwischen dem hint
und dem Ergebnistyp, obwohl [Symbol.toPrimitive]()
einen primitiven Wert zurückgeben muss, oder ein TypeError
wird ausgelöst.
Objekte ohne die [Symbol.toPrimitive]
-Eigenschaft werden zu primitiven Werten umgewandelt, indem die Methoden valueOf()
und toString()
in unterschiedlicher Reihenfolge aufgerufen werden, was im Detail im Abschnitt zur Typumwandlung erklärt wird. [Symbol.toPrimitive]()
ermöglicht volle Kontrolle über den Umwandlungsprozess zu primitiven Werten. Zum Beispiel behandelt Date.prototype[Symbol.toPrimitive]()
"default"
als wäre es "string"
und ruft toString()
statt valueOf()
auf. Symbol.prototype[Symbol.toPrimitive]()
ignoriert den Hinweis und gibt immer ein Symbol zurück, was bedeutet, dass selbst in String-Kontexten Symbol.prototype.toString()
nicht aufgerufen wird und Symbol
-Objekte immer explizit durch String()
in Strings umgewandelt werden müssen.
Beispiele
Modifizieren von primitiven Werten, die von einem Objekt umgewandelt wurden
Das folgende Beispiel beschreibt, wie die Eigenschaft Symbol.toPrimitive
den primitiven Wert modifizieren kann, der von einem Objekt umgewandelt wurde.
// An object without Symbol.toPrimitive property.
const obj1 = {};
console.log(+obj1); // NaN
console.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 Language Specification # sec-symbol.toprimitive |
Browser-Kompatibilität
BCD tables only load in the browser