【问题标题】:Two different result for "1"+"1" & "1" - - "1" in javascript [duplicate]javascript中“1”+“1”和“1”--“1”的两个不同结果[重复]
【发布时间】:2018-05-29 21:11:49
【问题描述】:

JavaScript 强制、顺序优先级和关联性可能会令人困惑,但我使用下面的链接来理解它,

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

但我仍然不明白为什么"1"+"1" 会导致"11""1"- - "1" 会导致2

- - 应该转换为+ 并且它应该像"1"+"1" 一样处理,我在这里缺少什么?

你可以在这里测试它:

console.log("1" + "1");
console.log("1"- - "1");

【问题讨论】:

  • "'- -' 应该转换为 +" - 为什么?
  • 在操作数周围加上引号,+ 被解释为字符串连接。 - - 运算符将操作数转换为数字并从 1 中减去 -1 得到 2。
  • 只需根据优先/关联规则添加括号,您应该就有答案了。
  • “我在这里遗漏了什么?” 不同的运算符执行不同种类的类型转换。
  • "- - 应该转换为 +" 绝对不是操作员的工作方式,在任何语言中。 “转换”不会发生在运营商身上。 - - 不再转换为 +,而不是 a * 1/b 转换为 a / b

标签: javascript


【解决方案1】:

两个-s 中的第二个- 被解释为一元-。一元运算符具有更高的优先级,因此"1"- - "1""1" - (-"1") 相同,后者与"1" - (-1) 相同,并且由于- 仅用于数字,因此上述操作变为1 - (-1),其计算结果为2 .

【讨论】:

  • 我不确定是否有优先级 - 没有其他合理的方法可以对这些运算符和操作数进行分组。
  • @OliverCharlesworth 我不确定我是否在关注你。你说的是我加的括号吗?
  • 是的。我的意思是 - 我认为你不能合理地将括号放在其他任何地方。这基本上相当于不需要担心优先级。
  • @OliverCharlesworth 啊!是的,是的,当然。我只是为了解释而添加了它们。
  • 确实 - 我同意括号有助于弄清楚发生了什么!
【解决方案2】:

“1”+“1” 将被解释为字符串连接。在计算表达式时,如果其中一个操作数是 string 类型,+ 将进行连接,而运算符 - 则不是这种情况。

“1” - - “1” 在 javascript 中,运算符 - 尝试对其拥有的操作数进行解析。如果它不能将它们解析为数字,它将返回 NaN。所以 “1” - - “1” 类似于 “1” - (- “1”) 。发生的情况是,因为存在运算符 -,所以会将 "1" 解析为数字(第一个操作数),并将第二个操作数 (-"1") 解析为数字。

其实这两个运算符有点不同:

  • "foo" + 1 将返回 foo1,因为 + 将进行连接

  • 而:"foo" - 1 将返回 NaN,因为第一个操作数无法解析为数字。相同的规则适用于运算符/*

【讨论】:

  • “如果它不能将它们解析成数字,则会抛出异常。” 这是不正确的。
  • "因为第一个操作数是字符串类型" 如果 either 操作数是字符串,它将进行连接。
  • @rockstar,你是对的。我已经编辑了我的答案
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多