为什么字符串+ +会给出奇怪的结果

我正在使用jQuery动态追加元素,并发现当使用+ +它显示NaN并且未添加下一个文本。

我猜可以某种方式+ +在这里作为算术加运算符并返回NaN

这不是增量运算符,因为两个+之间有空格。

我的问题是

  1. 实际发生了什么,所以它返回NaN
  2. 当字符串被包围时,为什么+此处不能用作连接运算符。
 $('#message').html('' + + ' new message'); 
  

在Node.js中可以看到相同的行为

 > 'a' + + 'b' // aNaN 

注意:我知道我在这里添加了额外的+并删除它对我有用。

原因是因为通过将+字符放在字符串之前,您试图将'b'字符串转换为数字,这会导致NaN 。 您问题中的代码等同于:

 'a' + Number('b') 

因此Number('b')返回NaN ,然后强制转换为字符串并附加到a 。 这种行为是JS的内在特征,因此正在使用的库(无论是jQuery,节点还是其他)都无关紧要。

因为第二个+被评估为一元加运算符

 '' + + ' new message' = '' + (+' new message') = '' + NaN = NaN 

javascript首先尝试将字符串'b'转换为数字并返回NaN因为'b'无法转换为数字。 然后'a' + 'NaN'连接到新字符串'aNaN' 。 在您的示例中相同:

 $('#message').html('' + + ' new message'); 

Javascript尝试将+ ' new message'转换为数字并返回NaN 。 然后'' + 'NaN'创建一个新的span元素, NaN创建为文本。

看一看:

一元加(+)

一元加运算符在其操作数之前,并计算其操作数,但尝试将其转换为数字(如果尚未)。 虽然一元否定( – )也可以转换非数字,但是一元加号是将某些东西转换为数字的最快和最优选的方式,因为它不会对数字执行任何其他操作。 它可以转换整数和浮点数的字符串表示forms,以及非字符串值true,false和null。 支持十进制和hex(“0x” – 前缀)格式的整数。 支持负数(但不支持hex)。 如果它无法解析特定值,它将评估为NaN。

+运算符可用于将变量转换为数字。 所以这…

 "a" + + "b" 

返回aNaN ,但这……

 "a" + + "5" 

返回a5

由于b不是数字, + b返回NaN。

你可以尝试这样:

 $('#message').html('' + ' new message'); 

要么

  $('#message').html('' + '' + ' new message'); 

==========================================

 $('#message').html('' + ' new message');