¿Por qué, cuando usamos Symbol.toPrimitive, tenemos que devolver una primitiva del mismo tipo que la sugerencia? Por ejemplo, al usar valueOf() y toString(), podemos devolver, por ejemplo, una cadena para la sugerencia de "número", o por ejemplo, un número para la sugerencia de "cadena". Pero en Symbol.toPrimitive esto no funciona, como si tras la devolución hubiera otro encasillado.
let user = { name: 'John', money: 1000, [Symbol.toPrimitive](hint) { return hint == 'string' ? 123 : `this.money`; }, }; alert(user); // 123 alert(+user); // NaNAquí obtenemos 123 para pista de cadena y NaN para pista de número.
Si lo hacemos así:
let user = { name: 'John', money: 1000, toString() { return 123; }, valueOf() { return '123'; }, }; alert(user); // 123 alert(+user); // '123'Como resultado, obtendremos 123 como pista de cadena y '123' como pista numérica.