讀古今文學網 > 學習JavaScript數據結構與算法(第2版) > 1.4 控制結構 >

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)