W ECMAScript 6 nowy Symbol.toPrimitive
symbol jest wprowadzona, która użyta jako klucz obiektu, should define funkcja zwraca wartość prymitywne obiektu:Symbol.toPrimitive vs Object.prototype.valueOf
let object = {
aNumber: 0,
[Symbol.toPrimitive]() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
jednak istnieje również funkcja Object.prototype.valueOf
, które according to the documentation, może być na nowo przekonwertować obiekt do wartości pierwotnej:
let object = {
aNumber: 0,
valueOf() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
Więc, który z tych sposobów aby przekonwertować obiekt na jego prymitywną wartość powinien być użyty w ES6 podczas definiowania nowego obiektu?
[Spec] (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive) -> _Funkcja abstrakcyjna ToPrimitive przyjmuje argument wejściowy i opcjonalny argument PreferredType. Operacja abstrakcyjna ToPrimitive przekształca argument wejściowy na typ inny niż Object. Jeśli obiekt jest zdolny do konwersji na więcej niż jeden typ pierwotny, może użyć opcjonalnej wskazówki PreferredType, aby faworyzować ten typ._ - Jeśli nie ma niestandardowego '.toPrimitive()' zwracana jest reesult z '.valueOf()' – Andreas
@Andreas Paragraf, z którym się łączyłeś, nie jest powiązany ze specyfikacją "Symbol", ale z konwersją wartości _any_ nieprostu na pierwotną. Odpowiednia specyfikacja dla "Symbol.toPrimitive" jest [w paragrafie 19.4.3.4.] (Https://people.mozilla.org/~jorendorff/es6-draft.html#[email protected]@toprimitive) –