首页 > 解决方案 > 有人可以解释为什么你需要在 console.log 中的括号中放置一个整数变量和一个数字吗?

问题描述

有人可以解释为什么以下代码仅在我将 beerCount-1 放在括号中时才有效吗?我真的很困惑。

var beerCount = 99
function beer(){
    while (beerCount>0) {
        console.log(beerCount + " of beer on the wall. " + beerCount + " of beer. Take one down, pass it around, " + (beerCount-1) + " of beers on the wall.");
        beerCount--;
    }
}

beer()

标签: javascriptdebugging

解决方案


+并且-具有相同的运算符优先级:14,并且它们都从左到右进行评估。

当一个字符串+d 与其他任何东西时,结果操作是连接:另一端,如果它不是一个字符串,则被一个字符串强制。(如果两边都是数字,则结果运算是加法)

但是只有数字可以-彼此相距。如果一侧的某些东西-不能被强制转换为一个数字,NaN将会是这样的结果。

所以,随着

"someString " + (beerCount-1) + " someOtherString"

括号确保首先计算中间表达式:

"someString " + someNumber + " someOtherString"

没有它,由于从左到右的操作,你会得到:

"someString " + beerCount - 1 + " someOtherString"
// ^^^^^^^^^^^^^^^^^^^^^^ evaluate first
"someString 99" - 1 + " someOtherString"
// ^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluate second, but cannot subtract;
// "someString 99" cannot be coerced to a number, so result is NaN
NaN + " someOtherString"

这是行不通的。


推荐阅读