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测试了两个代码。
答案 0 :(得分:10)
这是因为node
REPL默认打印出最后一个命令的结果。
在第一种情况下,最后一个命令是counter++
,它将计数器增加到60并返回59
在第二种情况下,最后一个命令是count += 1
,它将计数器增加到60并返回60
如果您在Chrome开发者控制台中运行它会更清楚
在node
REPL的情况下,您仍然可以看到最后一个数字有不同颜色的区别,表示它是上次评估的值而不是console.log
的输出
答案 1 :(得分:4)
在这两种情况下,您的循环仅输出1
到59
,但是,节点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
的值。 1}}的返回值是递增后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,您将获得预期的结果。