我不小心输入了以下JavaScript语句"1" + - "2"
,结果为"1-2"
。
我不确定为什么减号被视为字符串而不是导致语法错误。
我试图搜索,但我没有得到我想要的答案。
为什么减号被视为字符串?它在网上参考我可以看看?感谢
答案 0 :(得分:31)
简单:- "2"
评估为-2
,因为一元-
将其操作数强制转换为数字,这正是the behavior defined in the ECMA-262 spec.
11.4.7一元
-
运算符一元
-
运算符将其操作数转换为Number
类型,然后将其否定。请注意,否定+0
会产生−0
,否定−0
会产生+0
。生产 UnaryExpression
: -
UnaryExpression 评估如下:
然后,这只是字符串连接的问题:"1" + (-2)
毫不奇怪地评估"1-2"
。在这一点上,+
是上下文中的字符串连接(而不是加法)运算符应该不足为奇,因为that's what the spec says.
因为一如既往,这就是行为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}}中进行了解析。