对象转原始类型,会调用内置的 [ToPrimitive] 函数,对于该函数而言,其逻辑如下:
1. 如果Symbol.toPrimitive()方法,优先调用再返回;
2. 调用valueOf(),如果转换为原始类型,则返回;
3. 调用toString(),如果转换为原始类型,则返回;
4. 如果都没有返回原始类型,会报错。
var obj = { value: 3, toString() { return '5' }, valueOf() { return 4; }, [Symbol.toPrimitive]() { return 6 } }; console.log(obj + 1); // 7