whiledo循环

现考虑编写一个程序,输出 0 到 12 之间的所有偶数。其中一种编写方式如下所示:

  1. console.log(0);
  2. console.log(2);
  3. console.log(4);
  4. console.log(6);
  5. console.log(8);
  6. console.log(10);
  7. console.log(12);

该程序确实可以工作,但编程的目的在于减少工作量,而非增加。如果我们需要小于 1000 的偶数,上面的方式是不可行的。我们现在所需的是重复执行某些代码的方法,我们将这种控制流程称为循环。

while和do循环 - 图1

我们可以使用循环控制流来让程序执行回到之前的某个位置,并根据程序状态循环执行代码。如果我们在循环中使用一个绑定计数,那么就可以按照如下方式编写代码:

  1. let number = 0;
  2. while (number <= 12) {
  3. console.log(number);
  4. number = number + 2;
  5. }
  6. // → 0
  7. // → 2
  8. // … etcetera

循环语句以关键字while开头。在关键字while后紧跟一个用括号括起来的表达式,括号后紧跟一条语句,这种形式与if语句类似。只要表达式产生的值转换为布尔值后为true,该循环会持续进入括号后面的语句。

number绑定演示了绑定可以跟踪程序进度的方式。 每次循环重复时,number的值都比以前的值多 2。 在每次重复开始时,将其与数字 12 进行比较来决定程序的工作是否完成。

作为一个实际上有用的例子,现在我们可以编写一个程序来计算并显示2**10(2 的 10 次方)的结果。 我们使用两个绑定:一个用于跟踪我们的结果,一个用来计算我们将这个结果乘以 2 的次数。 该循环测试第二个绑定是否已达到 10,如果不是,则更新这两个绑定。

  1. let result = 1;
  2. let counter = 0;
  3. while (counter < 10) {
  4. result = result * 2;
  5. counter = counter + 1;
  6. }
  7. console.log(result);
  8. // → 1024

计数器也可以从1开始并检查<= 10,但是,由于一些在第 4 章中澄清的原因,从 0 开始计数是个好主意。

do循环控制结构类似于while循环。两者之间只有一个区别:do循环至少执行一遍循环体,只有第一次执行完循环体之后才会开始检测循环条件。do循环中将条件检测放在循环体后面,正反映了这一点:

  1. let yourName;
  2. do {
  3. yourName = prompt("Who are you?");
  4. } while (!yourName);
  5. console.log(yourName);

这个程序会强制你输入一个名字。 它会一再询问,直到它得到的东西不是空字符串。 !运算符会将值转换为布尔类型再取反,除了""之外的所有字符串都转换为true。 这意味着循环持续进行,直到您提供了非空名称。