有人可以解释为什么以下代码仅在我将 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()
+
和-
具有相同的运算符优先级:14,并且它们都从左到右计算。
当字符串与其他任何内容+
d 时,生成的操作是串联:如果另一端不是字符串,则用字符串强制使用。(如果两边都是数字,则结果运算为加法(
但只有数字可以彼此-
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"
这行不通。