由于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]"

木子
38 声望3 粉丝

加油呀!!!