一元操作符
console.log(1 + '1') //'11'
console.log(11 - '1') // 10
二元操作符
console.log(null + 1) // 1
console.log([] + []) // " "
对于隐式转换背后的一些原理
下面用一个例子来解释,方便理解
console.log(null + 1)
-
"+" 这个字符调用了ToPrimitive(input, [preferredType])这个方法来进行转换,其中参数input是输入值而参数preferredType是非必填项,表示期望转换的值参数值可以使Number和String
-
如果第二个参数没传,并且当input是日期类型是,preferredType的值为String, 其他情况值都为Number
-
如果preferredType的值为number则按照下面的程序执行 ToPrimitive(obj, Number) 1.如果obj是基本类型,直接返回 2.否则调用valueOf,如果返回一个原始值,则js将其返回 3.否则调用toString,如果返回一个原始值,则js将其返回 4.否则,js抛出一个类型错误异常.
-
如果preferredType的值为String时 ToPrimitive(obj, String) 1.如果obj是基本类型,直接返回 2.否则调用toString,如果返回一个原始值,则js将其返回 3.否则调用valueOf,如果返回一个原始值,则js将其返回 4.否则,js抛出一个类型错误异常.