其实是被隐式类型转换
如果操作数为对象和数组,会先转换成字符串,再拼接
String([]) // ""
String({}) // "[object Object]"
! + [] // !"" === true
true + [] // true + "" === "true"
所以当boolen类型遇到[] 和 {} 都会转成字符串 当两个boolen类型+连接的时候,才能转成number类型相加
true + true // 1 + 1 === 2
总结:
操作数是[] ,{} 和字符串类型时,都会转成字符串
其中[] 转成 "" ,{}转成 "[object object]"
操作数是 两个boolen类型,或者boolen和数字时,boolen会转成数字0,1