为什么下面给出的表达式在javascript中的计算结果为30?

为什么下面给出的表达式在javascript中的计算结果为30?,javascript,Javascript,为什么javaScript中的这个表达式计算为30 "37" - 7 // evaluates to 30 in javascript 在本例中,JavaScript隐式将“37”转换为37(数字),并对表达式求值。Bcz“-”运算符在与字符串一起使用时没有意义 如果JavaScript需要一个数字,它将尝试将您给它的值转换为一个数字(如果无法执行有意义的转换,则转换为NaN) 例如: 15 + "objects" // => "15 objects" "5" * "6" // =

为什么javaScript中的这个表达式计算为30

"37" - 7 // evaluates to 30 in 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)
将其两侧的值转换为数字,然后从LRH中减去RHS

  • 让lref是计算AdditiveExpression的结果
  • 设lval为GetValue(lref)
  • 让rref是计算乘法表达式的结果
  • 设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”。在你的控制台上试试,没错。其他语言可能会抛出错误,但JS只是修补并将字符串转换为数字。一些人认为这是异端,另一些人认为这是一个非常强大的功能。JS的灵活性不是每个人都喜欢的。@JeremyThille是的,我个人喜欢隐式转换的这一特性,但要注意这一点,否则会导致意外的结果:)