前端基础之 js 加法隐式转换

先做个小测试,不要百度和写代码测试
下面的输出都是什么

1 + 1

'1' + 1

1 + true

NaN + 1

NaN + '1'

null + 1

null + '1'

[1] + 1

[1,2] + [1]

[1] + {n : 1}

如果说你对上面这些运算有一些模糊不清的地方,那么估计你加法隐式转换没有搞清楚
加法运算的规则到底是什么呢
一张图让你明明白白

image

ok,我们来看个例子

image

看着上面的图来捋一捋
两边都是原始类型,都不是字符串,所以都要转为数字类型

image

相当于 0 + NaN,所以最后结果是NaN

再比如上面里的 [1] + 1

image

是含有对象类型的,要调用valueOf

image

调用之后不是原始类型,那就要调用toString

image

转成原始类型了,走上面的步骤,含有字符串,全部转为字符串相加,所以结果是'11'

再看一个例子

image

它这里报错了,提示无法把这个对象转换为原始类型,这是因为valueOf和toString无法把obj转换为原始类型

这些东西,往往会出现在面试题里面,考察你对知识点有没有理解到位,大家努力吧