JavaScript强制,订单优先级和关联性可能令人困惑,但我使用下面的链接来理解它,
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
但我仍然没有得到导致"1"+"1"
导致"11"
和"1"- - "1"
导致2
的原因{/ 1}},
- -
应该转换为+
,它应该像"1"+"1"
一样处理,我在这里缺少什么?
你可以在这里测试一下:
console.log("1" + "1");
console.log("1"- - "1");
答案 0 :(得分:7)
两个-
中的第二个-
被解释为一元-
。一元运算符具有更高的优先级,因此"1"- - "1"
与"1" - (-"1")
相同,后者与"1" - (-1)
相同,并且由于-
仅用于数字,因此上述操作变为{ {1}}评估为1 - (-1)
。
答案 1 :(得分:4)
“1”+“1”
将被解释为字符串连接。在评估表达式时,+
将执行连接,如果其中一个操作数的类型为string
,则运算符-
不是这样。
“1” - - “1”
,运算符-
尝试解析它拥有的操作数。如果它无法将它们解析为数字,它将返回NaN。因此“1” - - “1”
与“1” - (- “1”)
类似。会发生什么是因为有运算符-
将会有"1"
到数字(第一个操作数)的解析以及第二个操作数(-"1")
的解析也是数字。
实际上两个运营商都有一点不同:
"foo" + 1
将返回foo1
,因为+会进行连接
而:"foo" - 1
将返回NaN
,因为第一个操作数无法解析为数字。同样的规则适用于运营商/
和*
。