Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Symbol.toPrimitive
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2017 browserübergreifend verfügbar.
Die statische Dateneigenschaft Symbol.toPrimitive repräsentiert das bekannte Symbol Symbol.toPrimitive. Alle Algorithmen zur Typumwandlung suchen bei Objekten nach diesem Symbol, um eine Methode zu finden, die einen bevorzugten Typ entgegennimmt und eine primitive Repräsentation des Objekts zurückgibt. Erst wenn diese Methode nicht vorhanden ist, greifen sie auf die Methoden valueOf() und toString() des Objekts zurück.
Probieren Sie es aus
const object = {
[Symbol.toPrimitive](hint) {
if (hint === "number") {
return 42;
}
return null;
},
};
console.log(+object);
// Expected output: 42
Wert
Das bekannte Symbol Symbol.toPrimitive.
Eigenschaften von Symbol.toPrimitive | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beschreibung
Mithilfe der Eigenschaft Symbol.toPrimitive (als Funktionswert verwendet) kann ein Objekt in einen primitiven Wert umgewandelt werden. Die Funktion wird mit dem String-Argument hint aufgerufen, das den bevorzugten Typ des resultierenden primitiven Werts angibt. Für hint sind die Werte "number", "string" und "default" möglich.
Der Hinweis "number" wird von Algorithmen zur numerischen Typumwandlung verwendet. Der Hinweis "string" wird vom Algorithmus zur String-Umwandlung verwendet. Der Hinweis "default" wird vom Algorithmus zur Umwandlung in einen primitiven Wert verwendet. hint ist lediglich ein schwacher Hinweis auf den bevorzugten Typ; die Implementierung kann ihn ignorieren (wie es Symbol.prototype[Symbol.toPrimitive]() tut). Die Sprache schreibt nicht vor, dass der Ergebnistyp mit hint übereinstimmt. [Symbol.toPrimitive]() muss jedoch einen primitiven Wert zurückgeben; andernfalls wird ein TypeError ausgelöst.
Objekte ohne die Eigenschaft [Symbol.toPrimitive] werden in primitive Werte umgewandelt, indem die Methoden valueOf() und toString() in unterschiedlicher Reihenfolge aufgerufen werden. Dies wird im Abschnitt zur Typumwandlung genauer erläutert. [Symbol.toPrimitive]() ermöglicht die vollständige Kontrolle über die Umwandlung in einen primitiven Wert. Beispielsweise behandelt Date.prototype[Symbol.toPrimitive]() "default" wie "string" und ruft toString() statt valueOf() auf. Symbol.prototype[Symbol.toPrimitive]() ignoriert den Hinweis und gibt immer ein Symbol zurück. Das bedeutet, dass Symbol.prototype.toString() selbst in String-Kontexten nicht aufgerufen wird und Symbol-Objekte immer ausdrücklich mit String() in Strings umgewandelt werden müssen.
Beispiele
>Aus einem Objekt umgewandelte primitive Werte ändern
Das folgende Beispiel zeigt, wie die Eigenschaft Symbol.toPrimitive den primitiven Wert beeinflussen kann, der aus einem Objekt umgewandelt wird.
// 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
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.toprimitive> |
