为什么 while 循环中的递增运算符 (++) 在完成至少一个循环后才会计算?

Why do incrementing operators(++) in a while loop don't evaluate until they have done at least one loop?

如果我用 while 做一个简单的循环,它在第一个循环之后评估我的 ++ 运算符,这是否意味着我的 while 运算符做了一个小范围保存我的 i 和之后它完成评估并在其上应用 ++ 运算符?为什么这种情况会发生在这个运算符上,也会发生在 -- 上,但不会发生在让我们说一个简单的总和 i + 1?

var i = 0;
while(i++ < 1) { console.log(i) }

我的输出是 1

var i = 1;
while(i-- > 1) { console.log(i) }

我的输出是 0

var i = 0;
while(i + 1 < 1) { console.log(i) }

我的输出是 undefined

第一条语句,执行顺序为:

  1. i(当前为 0)< 1?如果是这样,增加 i 并进入循环,else 增加 i.
  2. 输出i (1)

第二个在很大程度上是相同的交易,但您的最终声明很明显永远不会执行。我们取零,加 1,然后与 1 进行比较。因此您的陈述等同于 while (1 < 1),这显然不是真的。

i++先求值再自增

++i 首先递增,然后计算它所在的任何表达式。

var i = 0;
while(i++ < 1) { console.log(i) }

首先你得到 0 < 1,它递增,它进入循环并打印为 1。console.log() 运行一次。下一次迭代将比较 1 < 1 哪个 returns 为假。请注意 i 最后是 2,因为第二次比较会再次递增它。

var i = 1;
while(i-- > 1) { console.log(i) }

此处计算为 1 > 1。您不会得到 console.log,但它会是 0,因为它在计算后会递减。

var i = 0;
while(i + 1 < 1) { console.log(i) }

这里递增是立即完成的,所以你得到 1 < 1 不计算为真,因此你不会进入循环。 i最后应该是0因为没有修改

我认为您混淆了 i++++i(这不是因为循环):

  • i++ 评估为 i 然后递增 i
  • ++i 递增 i 然后计算为 i

一些例子:

var i = 0;
console.log(i++); // ⇒ 0
console.log(i);   // ⇒ 1

i = 0;
console.log(++i); // ⇒ 1
console.log(i);   // ⇒ 1

i = 1;
console.log(i++); // ⇒ 1
console.log(i);   // ⇒ 2

您可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_()