In ECMAScript 6, un nuovo Symbol.toPrimitive
simbolo viene introdotta, che, quando utilizzato come chiave oggetto, should define una funzione per restituire il valore primitivo di un oggetto:Symbol.toPrimitive vs Object.prototype.valueOf
let object = {
aNumber: 0,
[Symbol.toPrimitive]() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
Tuttavia, v'è anche la funzione Object.prototype.valueOf
, che, according to the documentation, potrebbe essere ridefinito per convertire un oggetto per il valore di base:
let object = {
aNumber: 0,
valueOf() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
Quindi, quale di questi modi per convertire un oggetto al suo valore primitivo dovrebbe essere usato in ES6 quando si definisce un nuovo oggetto?
[Spec] (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive) -> _L'operazione astratta ToPrimitive accetta un argomento di input e un argomento opzionale PreferredType. L'operazione astratta ToPrimitive converte l'argomento di input in un tipo non Object. Se un oggetto è in grado di convertire in più di un tipo primitivo, può usare l'hint opzionale PreferredType per favorire quel tipo._ - Se non c'è custom '.toPrimitive()' viene restituito il risultato di '.valueOf()' – Andreas
@Andreas Il paragrafo a cui si è collegati è correlato non alla specifica 'Symbol', ma alla conversione di qualsiasi valore non primitivo in uno primitivo. La specifica corrispondente per 'Symbol.toPrimitive' è [nel paragrafo 19.4.3.4.] (Https://people.mozilla.org/~jorendorff/es6-draft.html#[email protected]@toprimitive) –