为什么 ('b'+'a'+ + 'a' + 'a').toLowerCase() 'banana'的结果?

2022-08-29 22:39:02

我正在练习一些JavaScript时,我的一个朋友遇到了这个JavaScript代码:

document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());

上面的代码答案!谁能解释一下为什么?"banana"


答案 1

+'a'解析为(“不是数字”),因为它将字符串强制转换为数字,而字符不能解析为数字。NaNa

document.write(+'a');
小写为 .banana

由于类型转换,将 to 添加到字符串中,得到 .然后有一个背后,给予.NaN"ba"NaN"NaN"baNaNabaNaNa

中间的空格是使第一个字符串串联和第二个字符串成为一元加号(即“正”)运算符。如果使用 ,则得到相同的结果,解析为 ,这等效于由于类型杂耍。+ +'ba'+(+'a')+'a''ba'+NaN+'a''ba'+'NaN'+'a'

document.write('ba'+(+'a')+'a');

答案 2
'b' + 'a' + + 'a' + 'a'

...被评估为....

'b' + 'a' + (+'a') + 'a'

(请参见:运算符优先级

(+'a')尝试使用一元加号运算符转换为数字。因为不是数字,所以结果是 NaN“不是数字”):'a''a'

'b'  +  'a'  +  NaN  + 'a'

虽然代表“不是数字”,但它仍然是一种数字类型;当添加到字符串中时,它就像任何其他数字一样连接:NaN

'b'  +  'a'  +  NaN  + 'a'  =>  'baNaNa'

最后,它是小写的:

'baNaNa'.toLowerCase()      =>  'banana'