while 语句是最为基本的循环控制语句。while 语句也被称为 while 循环。下面是 while 语句的语法规则。
// while 语句的语法规则 while (条件表达式) 语句
和 if-else 语句一样,在条件表达式位置所写的表达式的值将会被转换为布尔型。一旦开始执行 while 语句,就将首先对条件表达式求值。如果该值为假,则不会执行循环部分的语句并结束该 while 语句。如果条件表达式的值为真,则将执行该语句。在语句执行结束之后,会再次对条件表达式求值。如果此时该值仍然为真,则再次执行循环部分的语句。在条件表达式的值变为假之前,将一直重复执行循环部分的语句。
和 if-else 语句一样,可以在循环部分的语句处使用代码块(代码清单 4.4)。
// 容易产生混淆的缩进方式。 // 第二个 console.log() 其实是在 while 循环之外的。 var hzh = 1; while (hzh) console.log("黄子涵在循环之内"); console.log("黄子涵不在循环之内");
// 使用代码块的话就能很容易地理清语句结构 var hzh = 1; while (hzh) { console.log("黄子涵在循环之内"); console.log("黄春钦在循环之内"); }
// 使用代码块的话就能很容易地理清语句结构 var hzh = 1; while (hzh) { console.log("黄子涵在循环之内"); }
在 while 语法结构中可以使用任意的语句。if-else 语句也属于是语句,while 语句也属于语句。也就是说,在下面这样的 while 的循环中,也是可以使用 while 语句或者是 if-else 语句的。
// 使用代码块的话就能很容易地理清语句结构 var hzh = 1; var hcq = 2; while (hzh) { while (hcq) { console.log("黄子涵在双循环之中"); } }
// while 语句中嵌入 if 语句 var hzh = 1; var hcq = 2; while (hzh) { while (hcq) { console.log("黄子涵在循环之中"); } }
在条件表达式始终为真的情况下,循环内的语句将会被无限次重复执行。这样的循环一般称为无限循环。意外形成的无限循环是一种致命性的错误。
在其他的程序设计语言中,有时会有意地使用一些无限循环,但在客户端 JavaScript 开发中,无限循环就是一种错误。
要避免出现无限循环,从 while 循环中跳出,可以执行以下操作。
- 保证在循环过程中条件表达式的值将变为假
- 在循环内部使用 break 语句
- 在循环内部使用 return 语句
- 在循环内部抛出异常
对于在循环过程中条件表达式的值变为假的情况,在此考虑一个进行 10 次循环的 while 循环的例子。其实对于这个例子的功能,用之后将要介绍的 for 循环会更加直观,在这里仅仅因示例的需要而使用了 while 语句。
// 循环 10 次的 while 语句 var hzh = 0; while (hzh < 10) { console.log(hzh); hzh++; }
// 循环 10 次的 while 语句(另一种实现方式) var hzh = true; var hcq = 0; while (hzh) { console.log(hzh); hcq++; if (hcq == 10) { hzh = false; } }
第二种方式中通过改变标记变量来跳出 while 循环的做法,并不符合编程习惯。