官术网_书友最值得收藏!

3.3 流程控制語句

視頻講解:光盤\TM\lx\3\07流程控制語句.mp4

流程控制語句對于任何一門編程語言都是至關重要的,JavaScript也不例外。在JavaScript中提供了if條件判斷語句、switch多分支語句、for循環語句、while循環語句、do…while循環語句、break語句和continue語句7種流程控制語句。

3.3.1 if條件判斷語句

if條件判斷語句是最基本、最常用的流程控制語句,可以根據條件表達式的值執行相應的處理。if語句的語法格式如下:

        if(expression){
            statement 1
        }else{
            statement 2
        }

參數說明:

expression:必選項。用于指定條件表達式,可以使用邏輯運算符。

statement 1:用于指定要執行的語句序列。當expression的值為true時,執行該語句序列。

statement 2:用于指定要執行的語句序列。當expression的值為false時,執行該語句序列。

if...else條件判斷語句的執行流程如圖3.4所示。

圖3.4 if...else條件判斷語句的執行流程

說明

上述if語句是典型的二路分支結構。其中else部分可以省略,而且statement1為單一語句時,其兩邊的大括號也可以省略。

例如,下面3段代碼的執行結果是一樣的,都可以計算2月份的天數。

if語句是一種使用很靈活的語句,除了可以使用if...else的形式外,還可以使用if...else if的形式。if...else if語句的語法格式如下:

        if (expression 1){
            statement 1
        }else if(expression 2){
            statement 2
        }
        …
        else if(expression n){
            statement n
        }else{
            statement n+1
        }

if...else if語句的執行流程如圖3.5所示。

圖3.5 if...else if語句的執行流程

【例3.18】應用if語句驗證用戶登錄信息。(實例位置:光盤\TM\sl\3\2)

(1)在頁面中添加用戶登錄表單及表單元素。具體代碼如下:

        <form name="form1" method="post" action="">
            用戶名:<input name="user" type="text" id="user">
            密碼:<input name="pwd" type="text" id="pwd">
            <input name="Button" type="button" class="btn_grey" value="登錄">
            <input name="Submit2" type="reset" class="btn_grey" value="重置">
        </form>

(2)編寫自定義的JavaScript函數check(),用if語句驗證登錄信息是否為空。check()函數的具體代碼如下:

        <script language="javascript">
            function check(){
                if(form1.user.value==""){               //判斷用戶名是否為空
                    alert("請輸入用戶名!"); form1.user.focus(); return;
                }else if(form1.pwd.value==""){          //判斷密碼是否為空
                    alert("請輸入密碼!"); form1.pwd.focus(); return;
                }else{
                    form1.submit();                     //提交表單
                }
            }
        </script>

(3)在“登錄”按鈕的onclick事件中調用check()函數。具體代碼如下:

        <input name="Button" type="button" class="btn_grey" value="登錄" onclick="check()">

圖3.6 運行結果

運行程序,單擊“登錄”按鈕,將顯示如圖3.6所示的提示對話框。

說明

同Java語言一樣,JavaScript的if語句也可以嵌套使用。由于JavaScript中if語句的嵌套方式同Java語言基本相同,在此不再贅述。

3.3.2 switch多分支語句

switch是典型的多路分支語句,其作用與嵌套使用if語句基本相同。switch語句比if語句更具有可讀性,而且允許在找不到一個匹配條件的情況下執行一組默認的語句。switch語句的語法格式如下:

        switch (expression){
            case judgement 1:
                statement 1;
                break;
            case judgement 2:
                statement 2;
                break;
            …
            case judgement n:
                statement n;
                break;
            default:
                statement n+1;
                break;
        }

參數說明:

expression:任意的表達式或變量。

judgement:任意的常數表達式。當expression的值與某個judgement的值相等時,就執行此case后的statement語句;如果expression的值與所有judgement的值都不相等,則執行default后面的statement語句。

break:用于結束switch語句,從而使JavaScript只執行匹配的分支。如果沒有break語句,則該switch語句的所有分支都將被執行,switch語句也就失去了使用的意義。

switch語句的執行流程如圖3.7所示。

圖3.7 switch語句的執行流程

【例3.19】應用switch語句輸出今天是星期幾。(實例位置:光盤\TM\sl\3\3)

關鍵代碼如下:

    <script language="javascript">
    var now=new Date();             //獲取系統日期
    var day=now.getDay();           //獲取星期
    var week;
    switch (day){
        case 1:
            week="星期一";
            break;
        case 2:
            week="星期二";
            break;
        case 3:
            week="星期三";
            break;
        case 4:
            week="星期四";
            break;
        case 5:
            week="星期五";
            break;
        case 6:
            week="星期六";
            break;
        default:
            week="星期日";
            break;
    }
    document.write("今天是"+week);   //輸出中文的星期
    </script>

程序的運行結果如圖3.8所示。

圖3.8 實例運行結果

技巧

在程序開發的過程中,使用if語句還是使用switch語句,可以根據實際情況而定。盡量做到物盡其用,不要因為switch語句的效率高,就一味地使用;也不要因為if語句常用,就懶得應用switch語句。要根據實際情況,具體問題具體分析,使用最適合的條件語句。一般情況下,對于判斷條件較少的可以使用if條件語句,但是在實現一些多條件的判斷中,就應該使用switch語句。

3.3.3 for循環語句

for循環語句也稱為計次循環語句,一般用于循環次數已知的情況,在JavaScript中應用比較廣泛。for循環語句的語法格式如下:

        for(initialize; test; increment){
            statement
        }

參數說明:

initialize:初始化語句,用來對循環變量進行初始化賦值。

test:循環條件,一個包含比較運算符的表達式,用來限定循環變量的邊限。如果循環變量超過了該邊限,則停止該循環語句的執行。

increment:用來指定循環變量的步幅。

statement:用來指定循環體,在循環條件的結果為true時,重復執行。

說明

for循環語句執行的過程是:先執行初始化語句,然后判斷循環條件,如果循環條件的結果為true,則執行一次循環體,否則直接退出循環。然后執行迭代語句,改變循環變量的值。至此,完成一次循環。接下來,將進行下一次循環,直到循環條件的結果為false,才結束循環。

for循環語句的執行流程如圖3.9所示。

圖3.9 for循環語句的執行流程

說明

在for語句中可以使用break語句來中止循環語句的執行,關于break語句的用法參見3.3.6節。

為了使讀者更好地理解for語句,下面將以一個具體的實例介紹for語句的應用。

【例3.20】計算100以內所有奇數的和。(實例位置:光盤\TM\sl\3\4)

關鍵代碼如下:

程序運行結果如圖3.10所示。

圖3.10 運行結果

說明

在使用for語句時,一定要保證循環可以正常結束,也就是必須保證循環條件的結果存在為true的情況。否則,循環體將無休止地執行下去,從而形成死循環。例如,下面的循環語句就會造成死循環,原因是i永遠大于等于1。

        for(i=1; i>=1; i++){
            alert(i);
        }

3.3.4 while循環語句

while循環語句也稱為前測試循環語句,它是利用一個條件來控制是否要繼續重復執行這個語句。while循環語句與for循環語句相比,無論是語法還是執行的流程,都較為簡明易懂。while循環語句的語法格式如下:

        while(expression){
            statement
        }

參數說明:

expression:一個包含比較運算符的條件表達式,用來指定循環條件。

statement:用來指定循環體,在循環條件的結果為true時,重復執行。

說明

while循環語句之所以命名為前測試循環,是因為它要先判斷此循環的條件是否成立,然后再進行重復執行的操作。也就是說,while循環語句執行的過程是先判斷條件表達式,如果條件表達式的值為true,則執行循環體,并且在循環體執行完畢后,進入下一次循環,否則退出循環。

while循環語句的執行流程如圖3.11所示。

圖3.11 while循環語句的執行流程

注意

在使用while語句時,也一定要保證循環可以正常結束,即必須保證條件表達式的值存在為true的情況,否則將形成死循環。例如,下面的循環語句就會造成死循環,原因是i永遠都小于100。

        var i=1;
        while(i<=100){
            alert(i);                           //輸出i的值
        }

while循環語句經常用于循環執行的次數不確定的情況下。

【例3.21】列舉出累加和不大于10的所有自然數。(實例位置:光盤\TM\sl\3\5)

關鍵代碼如下:

      <script language="javascript">
          var i=1;                           //由于是計算自然數,所以i的初始值設置為1
          var sum=i;
          var result="";
          document.write("累加和不大于10的所有自然數為:<br>");
          while(sum<10){
              sum=sum+i;                     //累加i的值
              document.write(i+'<br>');      //輸出符合條件的自然數
              i++;                           //該語句一定不要少
          }
      </script>

程序運行結果如圖3.12所示。

圖3.12 列舉累加和不大于10的所有自然數

3.3.5 do…while循環語句

do…while循環語句也稱為后測試循環語句,它也是利用一個條件來控制是否要繼續重復執行這個語句。與while循環不同的是,它先執行一次循環語句,然后再去判斷是否繼續執行。do…while循環語句的語法格式如下:

        do{
            statement
        } while(expression);

參數說明:

statement:用來指定循環體,循環開始時先被執行一次,然后在循環條件的結果為true時,重復執行。

expression:一個包含比較運算符的條件表達式,用來指定循環條件。

說明

do…while循環語句執行的過程是:先執行一次循環體,然后再判斷條件表達式,如果條件表達式的值為true,則繼續執行,否則退出循環。也就是說,do…while循環語句中的循環體至少被執行一次。

do…while循環語句的執行流程如圖3.13所示。

圖3.13 do…while循環語句的執行流程

do…while循環語句同while循環語句類似,也常用于循環執行的次數不確定的情況下。

【例3.22】應用do…while循環語句列舉出累加和不大于10的所有自然數。(實例位置:光盤\TM\sl\3\6)

關鍵代碼如下:

        <script language="javascript">
            var sum=0;
            var i=1;                               //由于是計算自然數,所以i的初始值設置為1
            document.write("累加和不大于10的所有自然數為:<br>");
            do{
                sum=sum+i;                         //累加i的值
                document.write(i+'<br>');          //輸出符合條件的自然數
                i++;                               //該語句一定不要少
            }while(sum<10);
        </script>

程序運行結果如圖3.14所示。

圖3.14 累加和不大于10的所有自然數

3.3.6 break與continue語句

break語句與continue語句都可以用于跳出循環,但兩者也存在著一些區別。下面將詳細介紹這兩個關鍵字的用法。

break語句

break語句用于退出包含在最內層的循環或者退出一個switch語句。break語句的語法格式如下:

        break;

說明

break語句通常用在for、while、do…while或switch語句中。

【例3.23】在for語句中通過break語句中斷循環。代碼如下:

        var sum=0;
        for ( i=0; i<100; i++ ) {
            sum+=i;
            if  (sum>10)break;                             //如果sum>10,就會立即跳出循環
        }
        document.write("0至"+i+"(包括"+i+")之間自然數的累加和為:"+sum);

運行結果為:“0至5(包括5)之間自然數的累加和為:15”。

continue語句

continue語句和break語句類似,所不同的是,continue語句用于中止本次循環,直接開始下一次循環。其語法格式如下:

        continue;

說明

continue語句只能應用在while、for、do… while和switch語句中。

【例3.24】在for語句中通過continue語句計算金額大于等于1000的數據的和。代碼如下:

        var total=0;
        var sum=new Array(1000,1200,100,600,736,1107,1205);     //聲明一個一維數組
        for ( i=0; i<sum.length; i++ ) {
            if  (sum[i]<1000)continue;                          //不計算金額小于1000的數據
            total+=sum[i];
        }
            document.write("累加和為:"+total);                 //輸出計算結果

運行結果為:“累加和為:4512”。

說明

當使用continue語句中止本次循環后,如果循環條件的結果為false,則退出循環,否則繼續下一次循環。

主站蜘蛛池模板: 安宁市| 延寿县| 全椒县| 柳河县| 安康市| 台前县| 博客| 南华县| 汾西县| 洪雅县| 涞源县| 颍上县| 隆德县| 东乌珠穆沁旗| 宁明县| 永济市| 固原市| 普兰店市| 东阳市| 团风县| 全州县| 洪湖市| 长葛市| 逊克县| 如皋市| 义乌市| 新昌县| 邓州市| 平湖市| 司法| 屯门区| 莱西市| 景谷| 出国| 宜阳县| 洪洞县| 新安县| 宁陕县| 和顺县| 漯河市| 石棉县|