【问题标题】:Why given below expression evaluates to 30 in javascript? [duplicate]为什么给出下面的表达式在 javascript 中计算为 30? [复制]
【发布时间】:2016-05-03 10:06:50
【问题描述】:

为什么 JavaScript 中的这个表达式的值为 30?

"37" - 7 // evaluates to 30 in javascript

【问题讨论】:

  • + 将连接...您对"-" 有何期望?
  • 为什么不应该呢?你希望- 操作员做什么?

标签: javascript


【解决方案1】:

在这种情况下,JavaScript 将“37”隐式转换为 37(数字)并计算表达式。 Bcz '-' 运算符在与字符串一起使用时没有意义。

如果 JavaScript 需要一个数字,它会尝试将你给它的值转换为一个数字(或者如果它无法执行有意义的转换,则转换为 NaN)。

例如:

15 + "objects"   // =>  "15 objects"
"5" * "6" // => 30 (both strings converts to number)
1 - "x" // => NaN (string can't be converted to a number)
"50" - 20 // => 30 (one string converted to number)

【讨论】:

  • 没错。其他语言会抛出错误,但 JS 只是修补并将字符串转换为数字。有些人认为这是异端邪说,有些人认为这是一个非常强大的功能。 JS 的灵活性并不是每个人都喜欢。
  • @JeremyThille 是的,我个人喜欢隐式转换的这一特性,但应该小心这一点,否则会导致意想不到的结果:)
【解决方案2】:

subtraction operator 将自身任一侧的值转换为数字,然后从 LRH 中减去 RHS。

  1. 设 lref 为 AdditiveExpression 求值的结果。
  2. 令 lval 为 GetValue(lref)。
  3. 令 rref 为 MultiplicativeExpression 的计算结果。
  4. 令 rval 为 GetValue(rref)。
  5. 设 lnum 为 ToNumber(lval)。
  6. 设 rnum 为 ToNumber(rval)。
  7. 返回对 lnum 和 rnum 进行减法运算的结果。

【讨论】:

    【解决方案3】:

    JavaScript 可以根据命令计算表达式。在你的情况下,你使用 37 (一个字符串)并尝试(我假设删除 7 ???),所以你会得到 30 作为结果。

    由于 JavaScript 不知道该减号究竟如何处理,它只是将“37”转换为一个数字并减去 7,因此您的结果是 30。如果您改用“37”+7,则7 将被转换为字符串,JavaScript 会将这两个字符串连接成 377。

    【讨论】:

    • "37" - "7" 返回 30,而不是“3”。只需在您的控制台中尝试一下。
    猜你喜欢
    • 1970-01-01
    • 2020-03-31
    • 2016-02-03
    • 2019-02-18
    • 2017-10-28
    • 2015-06-04
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多