为什么在while循环中递增运算符(++)不会进行评估,直到它们完成至少一个循环为止?

时间:2015-10-28 20:31:10

标签: javascript operators

如果我用一段时间做一个简单的循环,它会在第一个循环之后评估我的++运算符,这是否意味着我的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

3 个答案:

答案 0 :(得分:2)

i++首先评估然后递增。

++i首先递增,然后评估它所处的表达式。

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

首先你得到0&lt; 1,它增加,进入循环并打印为1. console.log()运行一次。下一次迭代将比较返回false的1 < 1。请注意i最后是2,因为第二次比较会再次增加它。

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

这里评估为1&gt; 1.您将不会获得console.log,但它将为0,因为它在评估后会减少。

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

此处增量立即完成,因此您得到的1 < 1不会被评估为true,因此您不会进入循环。 <{1}}最终应为i,因为它未被修改。

答案 1 :(得分:1)

对于第一个陈述,执行顺序为:

  1. i(当前为0)&lt; 1?如果是,请增加i并输入循环,else增量i
  2. 输出i(1)
  3. 第二个是大致相同的交易,但你的最终陈述显然永远不会执行。我们取零,加1,然后比较为1.因此,你的陈述相当于while (1 < 1),这显然是不正确的。

答案 2 :(得分: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_()