为什么字符串+ +会给出奇怪的结果
我正在使用jQuery动态追加元素,并发现当使用+ +
它显示NaN
并且未添加下一个文本。
我猜可以某种方式+ +
在这里作为算术加运算符并返回NaN
。
这不是增量运算符,因为两个+
之间有空格。
我的问题是
- 实际发生了什么,所以它返回
NaN
- 当字符串被包围时,为什么
+
此处不能用作连接运算符。
$('#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');