javascript - 有人可以解释为什么你需要在 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()
解决方案
+
并且-
具有相同的运算符优先级: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"
这是行不通的。
推荐阅读
- ios - 无法安装 Apple Enterprise 应用程序
- r - 使用Shell从VBA内部执行R脚本不起作用
- tabulator - 如何在制表器中向嵌套树数据动态添加行?
- microsoft-cognitive - 使用 Microsoft 自定义翻译(免费层),我们可以构建自定义模型,但我们可以测试模型吗?
- java - Spring Security 不允许通过 https 访问
- sql - 如何让这个结果在列中显示
- python - Matplotlib 3d plot:在 2 个表面上获取单个颜色图
- tapestry - 在 Apache Tapestry 中从旧 URL 重定向到新 URL
- javascript - 在javascript中的数组内过滤对象内的数组
- python - 带有 upsert = true 的 Mongodb replace_one() 引发重复键错误