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

时间:2015-10-05 09:44:18

标签: javascript jquery operators

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

我可以猜测+ +在某种程度上可以作为算术加运算符并返回NaN

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

我的问题是

  1. 这里实际发生了什么,所以它返回NaN
  2. 为什么+在字符串包围时不能作为连接运算符使用。
  3. 
    
    $('#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;
    &#13;
    &#13;

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

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

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

5 个答案:

答案 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 (+)

  

一元加号运算符在其操作数之前,并计算其值   操作数但尝试将其转换为数字,如果不是   已经。虽然一元否定( - )也可以转换非数字,   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>