【发布时间】:2016-05-03 10:06:50
【问题描述】:
为什么 JavaScript 中的这个表达式的值为 30?
"37" - 7 // evaluates to 30 in javascript
【问题讨论】:
-
与
+将连接...您对"-"有何期望? -
为什么不应该呢?你希望
-操作员做什么?
标签: javascript
为什么 JavaScript 中的这个表达式的值为 30?
"37" - 7 // evaluates to 30 in javascript
【问题讨论】:
+ 将连接...您对"-" 有何期望?
- 操作员做什么?
标签: javascript
在这种情况下,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)
【讨论】:
subtraction operator 将自身任一侧的值转换为数字,然后从 LRH 中减去 RHS。
- 设 lref 为 AdditiveExpression 求值的结果。
- 令 lval 为 GetValue(lref)。
- 令 rref 为 MultiplicativeExpression 的计算结果。
- 令 rval 为 GetValue(rref)。
- 设 lnum 为 ToNumber(lval)。
- 设 rnum 为 ToNumber(rval)。
- 返回对 lnum 和 rnum 进行减法运算的结果。
【讨论】:
JavaScript 可以根据命令计算表达式。在你的情况下,你使用 37 (一个字符串)并尝试(我假设删除 7 ???),所以你会得到 30 作为结果。
由于 JavaScript 不知道该减号究竟如何处理,它只是将“37”转换为一个数字并减去 7,因此您的结果是 30。如果您改用“37”+7,则7 将被转换为字符串,JavaScript 会将这两个字符串连接成 377。
【讨论】:
"37" - "7" 返回 30,而不是“3”。只需在您的控制台中尝试一下。