你观察到的行为,因为这是如何浏览器控制台的作品。
对于您评估的每个代码,它都尝试返回一些值。对于微不足道的表达很容易 - 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()
。
这是完整的代码?你在某个时候返回2,因此它正在出现。您的while循环没有控制台语句可以在控制台上打印。 –
代码中的console.log()语句 – virendrao
这只是一个控制台,它返回最后一个表达式的值。这种行为非常棘手,所以最好暂时不要考虑它。 – zerkms