我不小心输入了以下 JavaScript 语句"1" + - "2",得到了结果"1-2"。我不确定为什么将减号视为字符串而不是导致语法错误。
我试图搜索,但没有得到我想要的答案。
为什么减号被视为字符串?它有在线参考我可以看看?谢谢
我不小心输入了以下 JavaScript 语句"1" + - "2",得到了结果"1-2"。我不确定为什么将减号视为字符串而不是导致语法错误。
我试图搜索,但没有得到我想要的答案。
为什么减号被视为字符串?它有在线参考我可以看看?谢谢
简单:- "2"计算结果为,-2因为一元-将其操作数强制为一个数字,这正是ECMA-262 规范中定义的行为。
11.4.7 一元
-运算符一元运算
-符将其操作数转换为Number类型,然后取反。请注意,否定+0产生−0,否定−0产生+0。产生式 UnaryExpression
: -UnaryExpression的评估如下:
那么这只是字符串连接的问题:"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".