在具有Node的终端处,++和+ = 1之间的差异

时间:2016-11-07 00:40:50

标签: javascript node.js

counter  = 1;
time = 60;

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

为什么代码的值高于1到60

以下代码的输出为1到59:

counter  = 1;
time = 60;

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

我在终端上用Node测试了两个代码。

6 个答案:

答案 0 :(得分:10)

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

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

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

如果您在Chrome开发者控制台中运行它会更清楚

enter image description here

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

enter image description here

答案 1 :(得分:4)

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

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

如果你不相信,试试这个:

counter  = 1;
time = 60;

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

答案 2 :(得分:1)

这两段代码表现完全相同。 a++;作为陈述与a += 1;

具有完全相同的效果

如果您遇到问题,则会出现在您向我们展示的示例代码之外。

a++a += 1之间的差异只会出现在您的示例代码中 中的返回值中。在递增之前,a++的返回值是a的值。 递增后a += 1 的值。但是,这种差异不会在您的代码中体现出来,因为您没有要求它返回值。

您在简化示例代码方面犯了一个错误。您示例中的两段代码的行为相同。

答案 3 :(得分:0)

在Javascript中,counter ++将在递增之前返回值。但是,它仍会像+ = 1那样递增计数器。

所以你的while循环将在完全相同的点突破,这就是所有白色文本都相同的原因 - 所有console.logs()都打印相同的东西。然而,在console.log循环之后,Node正在做一些特别的事情。它以黄色打印循环中的最后一个返回值,对于+ = 1代码是60,但++代码是59。

FWIW,这是一个很好的问题,而且downvoters羞辱了stackoverflow。

答案 4 :(得分:0)

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

然而,事实上,存在一点差异。

例如,在以下代码中。

a = 1
b = a+=1 
console.log(a,b)

2 2

a = 1
b = a++
console.log(a,b)

2 1

答案 5 :(得分:0)

默认情况下,您的终端上执行的最后一个命令将被打印,因此如果您在分配号码后使用console.log,您将获得预期的结果。