在JavaScript中添加字符串“1”+ - “2”==“1-2”

时间:2013-11-07 19:56:28

标签: javascript string operators

我不小心输入了以下JavaScript语句"1" + - "2",结果为"1-2"。 我不确定为什么减号被视为字符串而不是导致语法错误。

我试图搜索,但我没有得到我想要的答案。

为什么减号被视为字符串?它在网上参考我可以看看?感谢

3 个答案:

答案 0 :(得分:31)

简单:- "2"评估为-2,因为一元-将其操作数强制转换为数字,这正是the behavior defined in the ECMA-262 spec.

  

11.4.7一元-运算符

     

一元-运算符将其操作数转换为Number类型,然后将其否定。请注意,否定+0会产生−0,否定−0会产生+0

     

生产 UnaryExpression : - UnaryExpression 评估如下:

     
      
  1. expr 成为评估UnaryExpression的结果。
  2.   
  3. oldValue ToNumberGetValue expr ))。
  4.   
  5. 如果 oldValue NaN ,请返回 NaN
  6.   
  7. 返回否定 oldValue 的结果;也就是说,计算一个幅度相同但符号相反的数字。
  8.   

然后,这只是字符串连接的问题:"1" + (-2)毫不奇怪地评估"1-2"。在这一点上,+是上下文中的字符串连接(而不是加法)运算符应该不足为奇,因为that's what the spec says.


TL; DR

因为一如既往,这就是行为required by the spec.

答案 1 :(得分:16)

原文

"1" + - "2"

被解析为

"1" + ( - "2" )

-此处将"2"转换为数字并取消它,因此- "2"评估为-2。所以这就变成了:

"1" + (-2)

此处,+导致-2转换为字符串"-2",然后执行简单的字符串连接。

答案 2 :(得分:0)

一元-运算符(-x)优先于二进制+运算符(x + y)。

因此"1" + - "2"实际上被解析为"1" + -2,而"1" + "-2"又被解析为字符串连接"1-2",最终在{{1}}中进行了解析。