Baseline Widely available
Die statische Dateneigenschaft Symbol.toPrimitive
repräsentiert das bekannte Symbol Symbol.toPrimitive
. Alle Typumwandlungs-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 der valueOf()
- und toString()
-Methoden des Objekts zurückfallen.
const object = {
[Symbol.toPrimitive](hint) {
if (hint === "number") {
return 42;
}
return null;
},
};
console.log(+object);
// Expected output: 42
Wert
Das bekannte Symbol Symbol.toPrimitive
.
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 Werts angibt. Das hint
-Argument kann eine der folgenden ist: "number"
, "string"
und "default"
.
Der "number"
-Hinweis wird von numerischen Umwandlungsalgorithmen verwendet. Der "string"
-Hinweis wird vom String-Umwandlungsalgorithmus verwendet. Der "default"
-Hinweis wird vom 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]()
ein primitiver Wert zurückgeben muss, oder ein TypeError
wird ausgelöst.
Objekte ohne die [Symbol.toPrimitive]
-Eigenschaft werden in primitive Werte umgewandelt, indem die Methoden valueOf()
und toString()
in unterschiedlicher Reihenfolge aufgerufen werden, was im Abschnitt über Typumwandlung ausführlicher erklärt wird. [Symbol.toPrimitive]()
ermöglicht die vollständige Kontrolle über den Umwandlungsprozess in primitive Werte. Zum Beispiel behandelt Date.prototype[Symbol.toPrimitive]()
"default"
so, 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 auch in String-Kontexten Symbol.prototype.toString()
nicht aufgerufen wird, und Symbol
-Objekte müssen immer explizit über String()
in Strings umgewandelt werden.
Das folgende Beispiel beschreibt, wie die Symbol.toPrimitive
-Eigenschaft den primitiven Wert, der aus einem Objekt umgewandelt wurde, modifizieren kann.
// 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 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