js加法运算 你真的懂吗?
首先思考下下面代码的输入结果
null + null
undefined + undefined
null + undefined
null + 1
undefined + 1
NaN + NaN
[1] + 1
这里看答案(是否和你想的结果一样)
null + null // 0
undefined + undefined // NaN
null + undefined // NaN
null + 1 // 1
undefined + 1 // NaN
NaN + NaN // NaN
[1] + 1 // '11'
分析
这里我画了一张图,看到这张图估计都能明白了
我们知道原始类型有:
- Number
- String
- Boolean
- null
- undefined
- Symbol
根据上图的分析步骤我们把 null undefined转为数字, NaN是一种特殊得数字。
Number(null) // 0
Number(undefined) // NaN
很容易得出
null + null // 0
undefined + undefined // NaN
null + undefined // NaN
null + 1 // 1
undefined + 1 // NaN
NaN + NaN // NaN
针对含有对象类型的 [1] + 1
我们先把[1]调用valueOf,得到结果依然是 对象, 再调用toString得到结果是 '1',已经是原始类型中的字符串了
[1].valueOf() // [1]
[1].toString() // '1'
// 结果
'1' + 1 // '11'