我不小心输入了以下 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"
.