当我的一个朋友看到下面的JavaScript代码时,我正在练习一些JavaScript代码:
文档。write(“b”+“a”+“a”+“a”).toLowerCase();
上面的代码回答“香蕉”! 有人能解释一下原因吗?
当我的一个朋友看到下面的JavaScript代码时,我正在练习一些JavaScript代码:
文档。write(“b”+“a”+“a”+“a”).toLowerCase();
上面的代码回答“香蕉”! 有人能解释一下原因吗?
当前回答
+'a'解析为NaN ("Not a Number"),因为它将字符串强制为数字,而字符a不能解析为数字。 document . write (+ a); 小写的是banana。
将NaN添加到“ba”后,由于类型转换将NaN转换为字符串“NaN”,从而得到baNaN。 后面有个a,给香蕉。
+ +之间的空格是为了使第一个字符串连接,第二个字符串是一个一元加号(即+ +)。“积极”)算子。 如果使用'ba'+(+'a')+'a',则会得到相同的结果,解析为'ba'+NaN+'a',由于类型杂耍,这相当于'ba'+'NaN'+'a'。
document . write(’ba’+(成就)+成就);
其他回答
('b' + 'a' + + 'a' + 'a').toLowerCase()
为了清晰起见,让我们将其分解为两个步骤。首先,我们获得括号表达式的值,然后对结果应用toLowerCase()函数。
第一步
'b' + 'a' + + 'a' + 'a'
从左到右,我们有:
'b' + 'a'返回ba,这是常规连接。 ba++ 'a'尝试将Ba与+ 'a'连接。然而,由于一元操作符+试图将其操作数转换为数字,返回值NaN,然后在与原始ba -连接时将NaN转换为字符串,从而产生baNaN。 baNaN + 'a'返回baNaNa。同样,这是常规的串联。
在这个阶段,第一步的结果是baNaNa。
第二步
对第一步返回的值应用.toLowerCase()会得到:
香蕉
JavaScript中有许多类似的双关语。
在W3Schools或Mozilla开发者网络上阅读更多关于NaN的信息
+'a'解析为NaN ("Not a Number"),因为它将字符串强制为数字,而字符a不能解析为数字。 document . write (+ a); 小写的是banana。
将NaN添加到“ba”后,由于类型转换将NaN转换为字符串“NaN”,从而得到baNaN。 后面有个a,给香蕉。
+ +之间的空格是为了使第一个字符串连接,第二个字符串是一个一元加号(即+ +)。“积极”)算子。 如果使用'ba'+(+'a')+'a',则会得到相同的结果,解析为'ba'+NaN+'a',由于类型杂耍,这相当于'ba'+'NaN'+'a'。
document . write(’ba’+(成就)+成就);
'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'
看看这里的魔力吧。第二个加号是一个一元运算符,它给出NaN
游戏机。log ((b”+ + +的成就)。toLowerCase ()); log控制台(“b”+“a”+“a”+“a”); 游戏机。log ((b”成就+成就+成就)toLowerCase ());