【问题标题】:javascript while loop giving different results in node and browserjavascript while循环在节点和浏览器中给出不同的结果
【发布时间】:2016-03-10 03:25:18
【问题描述】:

我正在执行以下看似简单的代码

var number = 0;
while (number <= 12) {
    console.log(number);
    number = number + 2;  
}

我在浏览器和 Node.js 中得到了不同的结果。 当我在 Firefox(v. 32.0.3) 上的 Firebug(v 2.0.4 ) 控制台中运行它时,我得到的结果是

0 2 4 6 8 10 12 14

这不是我预期的结果。

在 Node 中,相同的代码给了我正确的答案

0 2 4 6 8 10 12

关于浏览器中的行为我有什么遗漏吗???

提前致谢。

【问题讨论】:

  • 无法重现,Firefox 32。
  • 你看到的是14 0 2 4 6 8 10 12吗? 14 似乎是循环的“结果”(我猜是因为循环体中的分配)。就像1 + 1 打印2。这是在 FF 32.0.3 中。我不能告诉你为什么 FF 这样做。
  • 除了@FelixKling 描述的内容之外,也无法复制。你确定你看到的是14吗?
  • 在循环之后,控制台打印最后一个计算表达式的值,即number = number + 2
  • 您可以通过将整个代码复制粘贴到 JS 控制台来重现,至少在 Chrome 中是这样。

标签: javascript node.js while-loop firebug


【解决方案1】:

如果您稍微更改代码:

var number = 0;
while (number <= 12) {
    console.log("z" + number);
    number = number + 2;  
}

z0
z2
z4
z6
z8
z10
z12
14

您会看到循环没有打印14。相反,这是循环完成运行并由控制台本身打印时表达式的最终值。

火狐

while (number <= 12) {
    console.log("z" + number);
    number = number + 2;  
}

14
"z0"
"z2"
"z4"
"z6"
"z8"
"z10"
"z12"

在 Firefox 中,它运行整个循环,打印结果,然后赶上控制台。

【讨论】:

  • 我已经在 Firebug 中尝试过,它给出的结果与 Chrome 相同。如何避免打印出 14?
  • 在控制台内运行?你不能。在页面或其他地方运行它。
【解决方案2】:

如果您在 Firebug 的控制台中运行脚本,那么它将评估代码。所以它正在评估 while 循环中 last number 的值(现在是 14)并将其打印出来。它实际上打印了 8 次 number 的值,但将它们分组为 1 个打印输出。

您只需在命令行中输入“window”即可看到相同的效果。它正在评估它的价值并在控制台中打印出来。

更多信息可以在Firebug's command line的描述中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多