js中类型转换有三种情况:
①转换为布尔值
②转换为数字
③转换为字符串
类型转换表格
在条件判断时,除了undefined,null,false,NaN,'',0,-0其他所有值都转换为true,包括所有对象
对象转原始类型
对象在转换类型的时候,会调用内置的 [[ToPrimitive]] 函数,对于该函数来说,算法逻辑一般来说如下:
如果已经是原始类型了,那就不需要转换了
调用 x.valueOf(),如果转换为基础类型,就返回转换的值
调用 x.toString(),如果转换为基础类型,就返回转换的值
如果都没有返回原始类型,就会报错
当然你也可以重写 Symbol.toPrimitive ,该方法在转原始类型时调用优先级最高。
运算
分两部分记忆:
1、加法运算
有字转字,无字转有字,无数转有数
也就是说,运算中其中一方为字符串,那么就会把另一方也转换为字符串,如果一方不是字符串或者数字,那么会将它转换为数字或者字符串
比如1+'3'='13'//有字转字
true + true // 2 无数转有数
4 + [1,2,3] // "41,2,3"
'a' + + 'b' // -> "aNaN"有字转字+'b'转字为NaN
2、非加法运算
有数必为数
那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字
true转换为1,false转换为0