ECMAScript In 6 wird ein neues Symbol Symbol.toPrimitive
eingeführt wird, die, wenn sie als Objektschlüssel verwendet wird, eine Funktion der should defineGrundwert eines Objekts zurückzukehren:Symbol.toPrimitive vs Object.prototype.valueOf
let object = {
aNumber: 0,
[Symbol.toPrimitive]() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
Allerdings gibt es auch die Object.prototype.valueOf
Funktion, die according to the documentation, neu definiert werden könnte, um ein Objekt zu dem Grundwert zu konvertieren:
let object = {
aNumber: 0,
valueOf() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
Also, welche dieser Möglichkeiten ein Objekt in seinen ursprünglichen Wert zu konvertieren, sollte in ES6 verwendet werden, wenn ein neues Objekt definiert wird?
[Spec] (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive) -> _Die abstrakte Operation ToPrimitive verwendet ein Eingabeargument und ein optionales Argument PreferredType. Die abstrakte Operation ToPrimitive konvertiert ihr Eingabeargument in einen Nicht-Objekttyp. Wenn ein Objekt in mehr als einen primitiven Typ konvertiert werden kann, kann es den optionalen Hinweis PreferredType verwenden, um diesen Typ zu bevorzugen._ - Wenn es kein benutzerdefiniertes '.toPrimitive()' gibt, wird das Ergebnis von '.valueOf()' zurückgegeben – Andreas
@Andreas Der Absatz, mit dem Sie verknüpft sind, bezieht sich nicht auf die 'Symbol'-Spezifikation, sondern auf die Umwandlung von _any_ nicht-primitiven Werten in primitive. Die entsprechende Spezifikation für 'Symbol.toPrimitive' lautet [in Absatz 19.4.3.4.] (Https://people.mozilla.org/~jorendorff/es6-draft.html#[email protected]@toprimitive) –