数据类型转换
js的数据类型只有三种情况:
1、转换为布尔值
2、转换为数字
3、转换为字符串
| 初始值 | 转换类型 | 结果 |
| number | boolean | 除了0,-0,NaN,其他都为true |
| string | boolean | 除了空字符串都为true |
| undefine,null | boolean | false |
| 引用类型 | boolean | true |
| boolean,函数,symbol | String | 'true' |
| number | String | '5' |
| 数组 | String | [1,2]=>'1,2' |
| 对象 | String | '[object,object]' |
| String | number | '1'=>1, a=>NaN |
| 数组 | number | 空数组转换为0,存在一个元素且为数字的转换为数字,其他的转换为NaN |
| NULL | number | 0 |
| 除了数组的引用类型 | number | NaN |
| symbol | number | 抛出错误 |
一、对象转转换原始类型
对象在转换类型的时候,会调用内置的【toprimitive】函数,该方法在转换为原始类型调用优先级最高,该函数的算法逻辑为:
1、如果已经是原始类型了,就不需要转换了
2、调用 x.valueOf(),如果转换为基础类型,就返回转换的值
3、调用x.toString(),如果转换为基础类型,就返回转换的值
4、如果都没有返回原始类型,就报错
二、运算符转换规则
四则运算符特点:
1、如果其中一方为字符串,那么另一方也会被转换为字符串
2、如果一方不是字符串或者数字,就会将它转换成字符串或者数字
!注:对于'a'+ +'b',得到的结果为aNaN,因为+‘b’得到的结果为NaN,类似的可使用+‘1’快速得到number类型。
除了加法运算符,其他的只要一方为数字,则另一方也会被转换为数字。
比较运算符特点:
如果是对象,则使用toprimitive转换类型,如果是字符串,则使用unicode字符索引来比较。
三、强制类型转换
强制转换方法包括Number(),parseInt( ),parseFloat(),toSting(),String(),boolean()
四、隐式类型转换规则
==运算符:
1、如果其中一个为null或者undefine,则 另一方也必须为null或者undefined,才会为true
2、如果其中有symbol,则返回false
3、如果两个值为number和String类型,则会将字符串转换为number。
4、如果其中一个操作值为boolean,则转换成number
+运算符:
+不仅可以用作数字相加,还能用作字符串相连,
1、如果其中一个为字符串,另一个是null,boolean,undefine类型,则调用toString()对字符串进行拼接,如果是纯对象,数组,正则等,则调用对象的转换方法进行拼接
2、如果其中一个为数字,另一个为null,boolean,undefine,则转换成数字,对象也转换成数字相加。
3、如果是一个数字和一个字符串,则按照字符串规则进行拼接。

浙公网安备 33010602011771号