我目前正在Code Academy学习JavaScript,而我正处于while循环部分的末尾。
以下代码:
j = 0;
while (j < 3) {
j++;
}
在控制台上生成2
,我不知道为什么。我尝试在Eclipse
JaveEE
上运行此操作只是为了意识到使用带有此代码的HTML文件作为脚本会给我一个不同的结果:一个空白页面。
这对我有意义,因为我只将j
增加到3
,但没有打印出来。不知道为什么CodeAcademy控制台给了我一个2。
这是控制台输出的屏幕截图:
答案 0 :(得分:6)
您观察的行为是因为浏览器控制台的工作原理。
对于您评估的每个代码,它会尝试返回一些值。对于琐碎的表达式来说,它很容易 - 2 + 2
可能会返回4
。
对于由多个语句组成的代码,它会变得更加复杂,并且控制台会尝试变得聪明。更复杂的是,控制台的行为不是标准化的,所以我们在这个时刻对于给定的浏览器所观察到的并不能保证适用于另一个浏览器或同一个浏览器的另一个版本。
让我们试着找出发生了什么:
j = 0;
while (j < 3) {
j++;
}
此代码浏览器尝试智能并输出最新找到的表达式的值,在这种情况下为j++;
。它返回2
,因为这是循环终止前最后一次迭代时j
的值。并且由于后缀增量在修改之前返回当前值 - 它返回2
。
如果我们将其更改为
j = 0;
while (j < 3) {
++j;
}
输出为3,原因完全相同。
现在让我们尝试不同的东西:
j = 0;
while (j < 3) {
j++;
a = 42;
}
这会输出42
。由于a = 42
是此代码中的最新表达式。
j = 0;
while (j < 3) {
j++;
var a = 42;
}
对于此示例,它将再次返回2
,因为控制台决定忽略赋值语句并恢复为最新的表达式。
总结一下:这种行为不是标准化的,浏览器只是尝试有用并输出一些东西,即使它不是你期望的那样。所以我的建议是不要依赖隐式控制台输出,并在想要获得结果的情况下明确使用console.log()
。