我正在尝试使用jQuery动态添加元素,并发现在使用+ +
时它显示NaN
并且未添加下一个文本。
我可以猜测+ +
在某种程度上可以作为算术加运算符并返回NaN
。
这不是增量运算符,因为两个+
之间有空格。
我的问题是
NaN
+
在字符串包围时不能作为连接运算符使用。
$('#message').html('<span>' + + ' new message</span>');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="message"></div>
&#13;
在Node.js中可以看到相同的行为
> 'a' + + 'b' // aNaN
注意:我知道我已经在这里添加了额外的+
,删除它对我有用。
答案 0 :(得分:12)
原因是因为将+
字符放在字符串之前,您尝试将'b'
字符串转换为数字,从而产生NaN
。您问题中的代码等同于:
'a' + Number('b')
因此Number('b')
会返回NaN
,然后强制转换为字符串并附加到a
。这种行为是JS的内在行为,因此正在使用的库(无论是jQuery,节点还是其他任何库)都无关紧要。
答案 1 :(得分:8)
因为第二个+
被评估为unary plus运算符,如
'<span>' + + ' new message</span>'
= '<span>' + (+' new message</span>')
= '<span>' + NaN
= <span>NaN
答案 2 :(得分:5)
javascript首先尝试将字符串'b'
转换为数字并返回NaN
,因为'b'
无法转换为数字。然后'a' + 'NaN'
连接到新字符串'aNaN'
。在您的示例中相同:
$('#message').html('<span>' + + ' new message</span>');
Javascript尝试将+ ' new message</span>'
转换为数字并返回NaN
。然后'<span>' + 'NaN'
创建一个新的span
元素和NaN
作为文本。
看看:
一元加号运算符在其操作数之前,并计算其值 操作数但尝试将其转换为数字,如果不是 已经。虽然一元否定( - )也可以转换非数字, unary plus是转换内容的最快和首选方式 变成一个数字,因为它不执行任何其他操作 数。它可以转换整数和浮点数的字符串表示, 以及非字符串值true,false和null。整数 支持十进制和十六进制(“0x” - 前缀)格式。 支持负数(但不支持十六进制)。如果不能 解析一个特定的值,它将评估为NaN。
答案 3 :(得分:3)
+
运算符可用于将变量转换为数字。所以这......
"a" + + "b"
返回aNaN
,但是......
"a" + + "5"
返回a5
由于b
不是数字,+ b
会返回NaN。
答案 4 :(得分:0)
你可以尝试这样:
$('#message').html('<span>' + ' new message</span>');
或强>
$('#message').html('<span>' + '' + ' new message</span>');
==========================================
$('#message').html('<span>' + ' new message</span>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="message"></div>