Tus*_*har 4 javascript jquery operators
我正在使用jQuery动态追加元素,并发现在使用+ +它时显示NaN并且未添加下一个文本.
我可以猜测它在某种程度上+ +可以作为算术加运算符并返回NaN.
这不是增量运算符,因为两者之间存在空间+.
我的问题是
NaN+当字符串包围时,为什么此处不能作为连接运算符使用.$('#message').html('<span>' + + ' new message</span>');Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="message"></div>Run Code Online (Sandbox Code Playgroud)
在Node.js中可以看到相同的行为
> 'a' + + 'b' // aNaN
Run Code Online (Sandbox Code Playgroud)
注意:我知道我在+这里添加了额外的内容,删除它对我有用.
Ror*_*san 12
原因是因为通过将+字符放在字符串之前,您尝试将'b'字符串转换为数字,从而产生NaN.您问题中的代码等同于:
'a' + Number('b')
Run Code Online (Sandbox Code Playgroud)
因此Number('b')返回NaN然后被强制转换为字符串并附加到a.这种行为是JS的内在特征,因此正在使用的库(无论是jQuery,节点还是其他)都无关紧要.
因为第二个+被评估为一元加运算符
'<span>' + + ' new message</span>'
= '<span>' + (+' new message</span>')
= '<span>' + NaN
= <span>NaN
Run Code Online (Sandbox Code Playgroud)
javascript首先尝试将字符串转换'b'为数字并返回,NaN因为'b'无法转换为数字.然后'a' + 'NaN'连接到新字符串'aNaN'.在您的示例中相同:
$('#message').html('<span>' + + ' new message</span>');
Run Code Online (Sandbox Code Playgroud)
Javascript尝试转换+ ' new message</span>'为数字并返回NaN.然后'<span>' + 'NaN'创建一个新span元素和NaN文本.
看一看:
一元加运算符在其操作数之前,并计算其操作数,但尝试将其转换为数字(如果尚未).虽然一元否定( - )也可以转换非数字,但是一元加号是将某些东西转换为数字的最快和首选方式,因为它不会对数字执行任何其他操作.它可以转换整数和浮点数的字符串表示形式,以及非字符串值true,false和null.支持十进制和十六进制("0x" - 前缀)格式的整数.支持负数(但不支持十六进制).如果它无法解析特定值,它将评估为NaN.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |