由于 JS 的弱类型特性,在进行 JS 的 ==,排序运算符,加减乘除,在对非原始值进行操作时,都会调用内部的 toPrimitive() 方法。
// 例外
{} + [] // 0 {} 会被认为代码块 故只剩下 +[],+0 0
// 当进行复杂类型转换时,会会调用 toPrimitive() 的内部函数
toPrimitive(input,preferedType?)
preferedType 是期望转换的类型
1. 如果 input 是原始值,直接返回这个值;2. 否则,如果 input 是对象,调用 input.valueOf(),如果结果是原始值,返回结果;3. 否则,调用 input.toString()。如果结果是原始值,返回结果;4. 否则,抛出错误。如果转换的类型是 String,2 和 3 会交换执行,即先执行 toString() 方法。[] + [] // ""[] + {} //"[object Object]"