为什么JavaScript中('b'+'a'++'a'+'a').toLowerCase()会输出banana?
问题原因
我们逐段拆解('b' + 'a' + + 'a' + 'a').toLowerCase()的执行逻辑就能明确原因:
- 运算从左到右执行,首先
'b' + 'a'是普通字符串拼接,得到结果'ba' - 接下来的
+ + 'a'中,第二个+是一元正运算符,作用是将后面的'a'强制转换为数字类型。由于'a'不是合法的数字格式,转换结果为NaN - 此时前面的字符串
'ba'和NaN做+运算,会先把NaN转为字符串'NaN',拼接后得到'baNaN' - 再拼接后面的
'a',得到字符串'baNaNa' - 最后调用
.toLowerCase()将所有字符转为小写,最终结果就是'banana'
你之前误以为会得到'bananaa',是错误估计了NaN转字符串后的拼接结果,实际上NaN转为字符串后会贡献N、a、N三个字符,加上前后的ba和末尾的a,刚好组合成转小写后等于banana的字符串。

内容的提问来源于stack exchange,提问作者Tahazzot
相关产品推荐
相关产品推荐

