Javascript do / while循环显示意外结果

时间:2016-04-02 22:03:41

标签: javascript loops do-while

有人可以帮助我理解为什么下面的问题会发生在下面的问题上吗?

循环应以5为增量向上和向下计数以及一串文本。 除了do / while循环不包含带有最终编号的文本字符串之外,这三个循环都有效。它只是说' 50'而不是数字50'。

UINavigationController

3 个答案:

答案 0 :(得分:1)

它们都没有包容性;他们都无法输出最后一个数字。

重要提示:此错误与使用do-whilewhilefor无关。您没有注意到其他变量的原因是一个变量的最后一个值与下一个变量的第一个重叠

如果你也记录了实际打印的变量,你会看到这个。

console.log('x: ');
for (x=1; x<50; x+=5) {
    console.log("The number x " + x);
}

console.log('y: ');
var y = 50
while (y>1) {
    console.log("The number y " + y);
    y-=5;
}

console.log('z: ');
var z = 0;
do {
    console.log("The number z " + z);
    z+=5;
}

while(z<50);

您不打印最后一个号码的原因是您在打印后递增/递减

考虑以下循环:

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

i为4时,会发生以下情况:

  1. log i(4)
  2. 增量i(现在为5)
  3. i < 5?的
  4. &lt; exit loop&gt;
  5. 正如您所看到的,i 到达最后一个号码,但一旦打到它就不会打印出来。解决此问题的一个简单方法是切换< <=以使循环具有包容性。

答案 1 :(得分:0)

当然&#34;数字50&#34;不应该在你的情况下显示:

...
console.log("The number " + z) // z == 45
z+=5 // z == 50
}
while (z<50); // no, exit from cycle
...

答案 2 :(得分:0)

do-while Statement被定义为(强调我的):

  

制作do 声明 while ( 表达式 );是   评估如下:

     
      
  1. V =空。
  2.   
  3. 迭代成为现实。
  4.   
  5. 重复,而迭代为真      
        
    1. stmt 成为评估 Statement 的结果。
    2.   
    3. 如果 stmt .value不为空,请设V = stmt .value。
    4.   
    5. 如果 stmt .type不继续|| stmt .target不在当前标签集中      
          
      1. 如果 stmt .type为break且 stmt .target位于当前标签集中,则返回(正常, V ,为空)。
      2.   
      3. 如果 stmt 突然完成,请返回stmt。
      4.   
    6.   
    7. exprRef 成为评估 Expression 的结果。
    8.   
    9. 如果ToBoolean(GetValue( exprRef ))为false,请将迭代设置为false。
    10.   
  6.   
  7. 返回(正常, V ,空);
  8.   

因此,对do-while语句的求值将返回 V ,即其中最后一个已计算语句的值。

在这种情况下,它是50.如果您在控制台中运行代码,控制台将显示代码返回的值,因此您将看到50。

如果你在一个页面上运行它,你就不会看到它。