使用前缀和后缀递增

问题描述 投票:0回答:2

有人可以解释为什么警报在 postfix 下仍然显示 5 吗?我知道前缀标识最后一次迭代是假的,但是使用后缀,它仍然会返回 i 作为 5。

// Prefix Code:
let i = 0;
while (++i < 5) {
    alert(i);
}
// Postfix code:
let i = 0;
while (i++ < 5) {
    alert(i);
}

有不同的输出。带前缀,输出为 1, 2, 3, 4

使用后缀,输出为 1, 2, 3, 4, 5

我无法理解为什么 postfix 输出会返回 5。

javascript increment post-increment
2个回答
0
投票

为了清楚起见,前缀运算符

++i
递增然后输出变量,后缀运算符
i++
输出然后递增变量。

对于前缀码,

++i
在递增后输出
i
本身的值,因此
i
永远不会完全达到
5

它输出

1, 2, 3, 4
。第一个是
1
,因为
i
0
开始递增。

对于后缀代码,

i++
输出的是
i
小一的值,所以即使
i
通过递增达到
5
,它实际上输出的是
4
。由于输出的
4
小于
5
,所以最终语句被执行。

最后一条语句执行时

i
的值为
5
,因此打印
i

然后

i++
将为
5
打印
i = 6
,以便停止执行。

示例:

let i = 4;
alert(i);    // 4
alert(i++);  // 4, even though i is now 5
alert(i);    // 5
alert(i++);  // 5, even though i is now 6
alert(i);    // 6

0
投票

阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment

如果使用 后缀,在操作数之后使用运算符(例如 x++),增量运算符将递增 并返回递增之前的值

如果使用 前缀,操作数之前有运算符(例如,++x),则增量运算符会递增 并返回递增后的值

因此,在后缀中,

while
条件中的比较是与 4 完成的,但
alert
中的值是 5

© www.soinside.com 2019 - 2024. All rights reserved.