当我的一个朋友看到下面的JavaScript代码时,我正在练习一些JavaScript代码:

文档。write(“b”+“a”+“a”+“a”).toLowerCase();

上面的代码回答“香蕉”! 有人能解释一下原因吗?


当前回答

使用+将在JavaScript中将任何值转换为数字!

所以…

这里首先要知道和学习的主要事情是在JavaScript中的任何值之前使用+,将该值转换为一个数字,但如果该值不能转换,JavaScript引擎将返回NaN,这意味着,不是一个数字(不能转换为一个数字,伙计!)和下面的故事:

其他回答

在W3Schools或Mozilla开发者网络上阅读更多关于NaN的信息

'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'))
=> ( ('b') + ('a') + (+) + ('a') + ('a')) // Here + + convert it to +operator 
Which later on try to convert next character to the number.

例如

const string =  '10';

你可以通过两种方式将字符串转换为数字:

数字(字符串); +字符串;

回到最初的查询; 这里它试图将下一个字符('a')转换为数字,但突然我们得到了错误NaN,

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

但它将其视为字符串,因为前一个字符在字符串中。 所以它会是

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

最后它将其转换为toLowerCase(),因此它将是banana

如果你把数字放在它旁边,你的结果将会改变。

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

它是'ba1a'

const例二= (b + a + + a + a) .toLowerCase ();/ /“香蕉” const example2 = (b + a + + ' 1 ' + ' a ') .toLowerCase ();/ /“ba1a” console.log(例二); console.log (example2);

+'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’+(成就)+成就);

看看这里的魔力吧。第二个加号是一个一元运算符,它给出NaN

游戏机。log ((b”+ + +的成就)。toLowerCase ()); log控制台(“b”+“a”+“a”+“a”); 游戏机。log ((b”成就+成就+成就)toLowerCase ());