JavaScript中神奇的+
今天又看到一个JavaScript的骚操作:
('b' + 'a' + + 'a' + 'a').toLowerCase() // =>"banana"
理解这一发的关键在于理解 + + 'a'
是什么意思。
我们一看到 +
可能下意识就认为是做 加法
, 却很容易忽略它也可能是 正号
.
所以这里两个 加号
的意义其实是不同的,第一个 加号
表示 加法
,而第二个 加号
表示 正号
.
而 'a'
并不是数字,因此 + 'a'
的值会是 NaN
,因此上面的语句就变成了
('b' + 'a' + NaN + 'a').toLowerCase()
而再根据加法操作的规则:
- 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来
- 如果有一操作数为对象,数字或者布尔值,则调用它们的toString()方法取得相应的字符串的值,再进行字符串拼接
因此上面的语句就变成了
('b' + 'a' + NaN.toString() + 'a').toLowerCase()
=>
('b' + 'a' + 'NaN' + 'a').toLowerCase()