文章目录
1、加法运行图
2、案例在图上的表现
(1) null+ undefined
图解思路:
- 判断两边是否都是原始数据类型 => null与undefined都是原始类型
- 判断是否有字符串 => 加号两边不存在字符串
- 把两端都转为数字 =>
(2)NaN+'1'
图解思路:
- 判断两边是否都是原始数据类型 => NaN
与'1'
都是基本数据类型
- 判断是否有字符串 => '1'
是字符串
- 都转为字符串 => 进行字符串的拼接
(3)1+true
图解思路:
- 判断两边是否都是原始数据类型 => 1
与true
都是基本数据类型
- 判断是否有字符串 => 不存在字符串
- 都转为数字 => 进行数字的加法运算
(4)[1]+1
图解思路:
- 判断两边是否都是原始数据类型 => [1]
是对象类型
- 调用valueOf()
,看是否能转成原始数据类型=> 不能转成原始类型
- 继续调用toString()
,看是否能转成基本数据类型 => [1]
能转成'1'
,然后再按原始类型进行推断,有字符串拼接
(5)var obj = {valueOf:function(){return this},toString:function(){return this}}
obj+1
图解思路:
- 判断两边是否都是原始数据类型 =>
obj
是对象类型 - 调用
valueOf()
,看是否能转成原始数据类型=> 不能转成原始类型 - 继续调用
toString()
,看是否能转成基本数据类型 => 不能转成字符串 - 报错
(6)[1,2]+{n:1}
图解思路:
- 判断两边是否都是原始数据类型 => 都是对象类型
- 调用
valueOf()
,看是否能转成原始数据类型=> 不能转成原始类型 - 继续调用
toString()
,看是否能转成基本数据类型 =>[1,2]
能转成'1,2'
,{n:1}
能转成[object Object]
,然后再按原始类型进行推断,有字符串拼接