- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在 Code Academy 上学习 JavaScript我在 while 循环部分的末尾。
以下代码:
j = 0;
while (j < 3) {
j++;
}
在控制台上生成了 2
,我不知道为什么。我尝试在 Eclipse
JaveEE
上运行它,结果发现使用带有此代码的 HTML 文件作为脚本会得到不同的结果:空白页。
这对我来说很有意义,因为我只是将 j
递增到 3
,但没有打印它。不知道为什么 CodeAcademy 控制台给我 2。
这是控制台输出的屏幕截图:
最佳答案
您观察到的行为是因为浏览器控制台就是这样工作的。
对于您评估的每个代码,它都会尝试返回一些值。对于简单的表达式,这很简单 - 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()
以防万一您想要获得结果。
关于javascript - 我不明白一个简单的 JavaScript 'while loop',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954848/
我是一名优秀的程序员,十分优秀!