提问者:小点点

为什么结果是('b'a'a')。toLowerCase()'香蕉'?


我在练习JavaScript时,我的一个朋友发现了以下JavaScript代码:

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

上面的代码回答"banana"!有人能解释为什么吗?


共3个答案

匿名用户

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

document.write(+'a');

匿名用户

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

...被评估为。。。。

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

(请参阅:运算符优先级)

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

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

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

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

最后,它是小写的:

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

匿名用户

('b' + 'a' + + 'a' + 'a').toLowerCase()

为了清楚起见,让我们将其分解为两个步骤。首先,我们得到带括号表达式的值,然后对结果应用toLowerCase()函数。

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

从左到右,我们有:

  • 'b'a'返回ba,这是常规连接
  • ba'a'尝试将ba与'a'连接起来。然而,由于一元运算符试图将其操作数转换为一个数字,因此返回值NaN,当与原始ba连接时,该值将转换为字符串,从而产生baNaN
  • baNaN“a”返回香蕉。同样,这是常规连接

在这个阶段,第一步的结果是香蕉。

在步骤一返回的值上应用. toLowerCase()给出:

香蕉

在JavaScript中有许多类似的双关语,您可以查看。

相关问题