要掌握类型转换的规则:
对象转原始数据类型:
会调用内置的[[toprimitive]]函数,该函数的一般逻辑是:
- 调用x.valueOf(); 如果返回原始类型,则返回该原始类型
- 调用toString(); 如果返回原始类型,则返回该原始类型
- 如果都没有返回,则报错
条件判断:
undefined,null,false ,0,-0,NaN,' ',其他都会被转换为true;包括对象,不管是不是空对象。
运算符转换:
加减运算符规则:
- 运算符其中一方为字符串,则会把另一方转为字符串
- 如果一方不是字符串或数字,则将其转换为数字或字符串
- 如果其中一方是数字,则将另一方转为数字
1 + '1' //'11'
true + true //2
4 + [1,2,3] //41,2,3 //[1,2,3]转字符串'1,2,3'=>4+'1,2,3'=>'41,2,3'
// 特殊情况
'a' + + 'b' //'aNaN' 因为+ 'b' => NaN
4 * '3' //12
4 * [] //0
4 * [1,2] //NaN // [1,2]转数字NaN