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

alj*_*n82 18 javascript string operators

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

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

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

Mat*_*all 31

简单:- "2"求值为-2因为一元将-其操作数强制转换为数字,这正是ECMA-262规范中定义的行为.

11.4.7一元-运算符

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

生产UnaryExpression : - UnaryExpression的计算方法如下:

  1. expr是评估UnaryExpression的结果.
  2. oldValueToNumber(GetValue(expr)).
  3. 如果oldValueNaN,则返回NaN.
  4. 返回否定oldValue的结果; 也就是说,计算具有相同幅度但符号相反的数字.

然后,它只是字符串连接的问题:"1" + (-2)不出所料地评估"1-2".到目前为止+,上下文中的字符串连接(而不是加法)运算符应该不足为奇,因为这是规范所说的.


TL; DR

因为,一如既往,这是规范所要求的行为.


p.s*_*w.g 16

原本的

"1" + - "2"
Run Code Online (Sandbox Code Playgroud)

被解析为

"1" + ( - "2" )
Run Code Online (Sandbox Code Playgroud)

-这里转换"2"成数字并取消它,这样- "2"的计算结果为-2.所以这变成了:

"1" + (-2)
Run Code Online (Sandbox Code Playgroud)

这里,+导致-2转换为字符串,"-2"然后进行简单的字符串连接.