节点[关闭]的REPL处++与+ = 1之间的差异

问题描述 投票:2回答:6
counter  = 1;
time = 60;

while (counter < time) {
    console.log(counter);
    counter += 1;
}

为什么REPL中的代码值大于1到60

虽然下面的REPL中的代码输出为1到59:

counter  = 1;
time = 60;

while (counter < time) {
    console.log(counter);
    counter++;
}

我测试了REPL中的两个代码。

javascript node.js read-eval-print-loop
6个回答
10
投票

这是因为默认情况下node REPL打印出最后一条命令的结果。

在您的第一种情况下,最后一个命令是counter++,它将计数器增加到60并返回59

在第二种情况下,最后一个命令是count += 1,它将计数器增加到60并返回60

更清楚的是,您是否在Chrome开发者控制台中运行它

enter image description here

node REPL情况下,您仍然可以看到最后一个数字具有不同的颜色的区别,表明它是最后评估的值而不是console.log的输出

enter image description here


5
投票

在两种情况下,循环仅输出159,但是,节点REPL也会输出最后计算的表达式的结果。

[在第一种情况下,最后计算的表达式为(counter += 1),其计算为计数器(60)的新值,而在第二种情况下,最后一次计算的表达式为(counter++),其计算为计数器增量前的值( 59)。如果仔细看,您会发现在第二个版本中,59在输出中出现了两次(由console.log打印一次,由REPL打印一次。)>

如果您不确定,请尝试以下方法:

counter  = 1;
time = 60;

while (counter < time) {
    console.log(counter);
    counter += 1;
    'Hello!';
}

1
投票

这两段代码的行为完全相同。 a++;作为语句将与a += 1;


0
投票
我认为您的代码中“ + = 1”和“ ++”的工作方式相同。

0
投票
在Javascript中,counter ++将在递增之前返回该值。但是,它将仍然像+ = 1一样增加计数器。

0
投票
默认情况下,将打印出在终端上执行的最后一条命令,因此,如果在分配了编号后使用console.log,则会得到预期的结果。
© www.soinside.com 2019 - 2024. All rights reserved.