为什么 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
第一条语句,执行顺序为:
- 是
i
(当前为 0)< 1?如果是这样,增加 i
并进入循环,else
增加 i
.
- 输出
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_()
如果我用 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
第一条语句,执行顺序为:
- 是
i
(当前为 0)< 1?如果是这样,增加i
并进入循环,else
增加i
. - 输出
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_()