为什么字符串上的 + + 会产生奇怪的结果

Why + + on strings gives strange result

本文关键字:结果 字符串 为什么      更新时间:2023-09-26

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

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

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

我的问题是

  1. 这里实际发生了什么,所以它返回NaN
  2. 为什么+在这里当它被字符串包围时不能用作连接运算符。

$('#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>

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

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

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

原因是通过将+字符放在字符串之前,您尝试将'b'字符串转换为数字,从而导致NaN .您问题中的代码等效于以下内容:

'a' + Number('b')

因此,Number('b')返回NaN然后强制到字符串并附加到a。这种行为是JS固有的,所以正在使用的库(无论是jQuery,node还是任何其他库(都是无关紧要的。

因为第二个+被计算为一元加运算符,例如

'<span>' + + ' new message</span>'
= '<span>' + (+' new message</span>')
= '<span>' + NaN
= <span>NaN

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

$('#message').html('<span>' + + ' new message</span>');

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

看一看:

一元加号 (+(

一元加运算符在其操作数之前,并计算其 操作数,但尝试将其转换为数字(如果不是( 已经。虽然一元否定(-(也可以转换非数字, 一元加是转换内容的最快和首选方式 成一个数字,因为它不对 数。它可以转换整数和浮点数的字符串表示, 以及非字符串值 true、false 和 null。中的整数 支持十进制和十六进制(以"0x"为前缀(格式。 支持负数(但不适用于十六进制(。如果不能 解析一个特定的值,它将计算为 NaN。

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

"a" + + "b"

返回aNaN,但这...

"a" + + "5"

返回a5

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

你可以这样尝试:

$('#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>