首页 » 学习JavaScript数据结构与算法(第2版) » 学习JavaScript数据结构与算法(第2版)全文在线阅读

《学习JavaScript数据结构与算法(第2版)》1.4 控制结构

关灯直达底部

JavaScript的控制结构和C与Java里的类似。条件语句支持if...elseswitch。循环支持whiledo...whilefor

1.4.1 条件语句

首先我们看一下如何构造if...else条件语句。有几种方式。

如果想让一个脚本仅当条件是true时执行,可以这样写:

var num = 1;if (num === 1) {  console.log("num is equal to 1");}  

如果想在条件为true的时候执行脚本A,其他情况下都执行脚本B,可以这样写:

var num = 0;if (num === 1) {  console.log("num is equal to 1");} else {  console.log("num is not equal to 1, the value of num is " +num);}  

if...else语句也可以用三元操作符替换,例如下面的if...else语句:

if (num === 1){  num--;} else {  num++;}  

可以用三元操作符替换为:

(num === 1) ? num-- : num++;  

如果我们有多个脚本,可以多次使用if...else,根据不同的条件执行不同的语句:

var month = 5;if (month === 1) {  console.log("January");} else if (month === 2){  console.log("February");} else if (month === 3){  console.log("March");} else {  console.log("Month is not January, February or March");}  

最后,还有switch语句。如果要判断的条件和上面的一样(但要和不同的值进行比较),可以使用swtich语句:

var month = 5;switch(month) {  case 1:  console.log("January");  break;  case 2:  console.log("February");  break;  case 3:  console.log("March");  break;  default:  console.log("Month is not January, February or March");}  

对于switch语句来说,casebreak关键字的用法很重要。case判断当前switch的值是否和case分支语句的值相等。break会中止switch语句的执行。没有break会导致执行完当前的case后,继续执行下一个case,直到遇到breakswitch执行结束。最后,还有default关键字,在表达式不匹配前面任何一种情形的时候,就执行default中的代码(如果有对应的,就不会执行)。

1.4.2 循环

在处理数组元素时会经常用到循环(数组是下一章的主讲内容)。在我们的算法中也会经常用到for循环。

JavaScript中的for循环与C和Java中的一样。循环的计数值通常是一个数字,然后和另一个值比较(如果条件成立就会执行for循环中的代码),之后这个数值会递增或递减。

  • 在下面的代码里,我们用了一个for循环。当i小于10时,会在控制台中输出其值。i的初始值是0,因此这段代码会输出0到9。

    for (var i=0; i<10; i++) {  console.log(i);}  
  • 我们要关注的下一种循环是while循环。当while的条件判断成立时,会执行循环内的代码。下面的代码里,有一个初始值为0的变量i,我们希望在i小于10时输出它的值。输出会是0到9:

    var i = 0;while(i<10){  console.log(i);  i++;}  
  • do...while循环和while循环很相似。区别是在while循环里,先进行条件判断再执行循环体中的代码,而在do...while循环里,是先执行循环体中的代码再判断循环条件。do...while循环至少会让循环体中的代码执行一次。下面的代码同样会输出0到9:

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