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

Adding strings in JavaScript "1" + - "2" == "1-2"

本文关键字:JavaScript 添加 字符串      更新时间:2023-09-26

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

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

为什么减号被视为字符串? 它有在线参考我可以看吗? 谢谢

简单:- "2"的计算结果为 -2,因为一元-将其操作数强制为一个数字,这正是 ECMA-262 规范中定义的行为。

11.4.7 一元-运算符

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

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

  1. expr 是计算 UnaryExpression 的结果。
  2. oldValue 为 ToNumber(GetValue(expr))。
  3. 如果 oldValue 为 NaN,则返回 NaN
  4. 返回否定 oldValue 的结果;即计算一个大小相同但符号相反的数字。

然后这只是字符串连接的问题:不出所料,"1" + (-2)评估为 "1-2" .在这一点上,+在上下文中是一个字符串连接(而不是加法)运算符也就不足为奇了,因为这就是规范所说的。

<小时 />

博士

因为,与往常一样,这是规范要求的行为。

原文

"1" + - "2"

解析为

"1" + ( - "2" )

这里的-"2"转换为数字并取反它,因此- "2"计算结果为 -2 。所以这变成了:

"1" + (-2)

在这里,+使-2转换为字符串,"-2",然后执行简单的字符串连接。

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

所以"1" + - "2"实际上被解析为"1" + -2,而又被解析为字符串约定"1" + "-2",最后在"1-2"

解析。