6.JavaScript循環(huán)(for循環(huán)、雙重for循環(huán)、while循環(huán)、do-while循環(huán)、跳出循環(huán)(continue、break))

1 - 循環(huán)

1.1 for循環(huán)

  • 語法結(jié)構(gòu)
for(初始化變量; 條件表達(dá)式; 操作表達(dá)式 ){
     //循環(huán)體
 }
名稱 作用
初始化變量 通常被用于初始化一個計數(shù)器,該表達(dá)式可以使用 var 關(guān)鍵字聲明新的變量,這個變量幫我們來記錄次數(shù)。
條件表達(dá)式 用于確定每一次循環(huán)是否能被執(zhí)行。如果結(jié)果是 true 就繼續(xù)循環(huán),否則退出循環(huán)。
操作表達(dá)式 用于確定每一次循環(huán)是否能被執(zhí)行。如果結(jié)果是 true 就繼續(xù)循環(huán),否則退出循環(huán)。

執(zhí)行過程:

  1. 初始化變量,初始化操作在整個 for 循環(huán)只會執(zhí)行一次。
  • 執(zhí)行條件表達(dá)式,如果為true,則執(zhí)行循環(huán)體語句,否則退出循環(huán),循環(huán)結(jié)束。
  1. 執(zhí)行操作表達(dá)式,此時第一輪結(jié)束。
  2. 第二輪開始,直接去執(zhí)行條件表達(dá)式(不再初始化變量),如果為 true ,則去執(zhí)行循環(huán)體語句,否則退出循環(huán)。
  3. 繼續(xù)執(zhí)行操作表達(dá)式,第二輪結(jié)束。
  4. 后續(xù)跟第二輪一致,直至條件表達(dá)式為假,結(jié)束整個 for 循環(huán)。

斷點調(diào)試:
斷點調(diào)試是指自己在程序的某一行設(shè)置一個斷點,調(diào)試時,程序運行到這一行就會停住,然后你可以一步一步往下調(diào)試,調(diào)試過程中可以看各個變量當(dāng)前的值,出錯的話,調(diào)試到出錯的代碼行即顯示錯誤,停下。斷點調(diào)試可以幫助觀察程序的運行過程

斷點調(diào)試的流程:
1、瀏覽器中按 F12--> sources -->找到需要調(diào)試的文件-->在程序的某一行設(shè)置斷點
2、Watch: 監(jiān)視,通過watch可以監(jiān)視變量的值的變化,非常的常用。
3、摁下F11,程序單步執(zhí)行,讓程序一行一行的執(zhí)行,這個時候,觀察watch中變量的值的變化。

  • for 循環(huán)重復(fù)相同的代碼

    比如輸出10句“媳婦我錯了”

    //  基本寫法
    for(var i = 1; i <= 10; i++){
        console.log('媳婦我錯了~');
    }
    // 用戶輸入次數(shù)
    var num = prompt('請輸入次數(shù):');
    for ( var i = 1 ; i <= num; i++) {
        console.log('媳婦我錯了~');
    } 
    
  • for 循環(huán)重復(fù)不相同的代碼

    例如,求輸出1到100歲:

//  基本寫法
  for (var i = 1; i <= 100; i++) {
        console.log('這個人今年' + i + '歲了');
  }

例如,求輸出1到100歲,并提示出生、死亡

// for 里面是可以添加其他語句的 
for (var i = 1; i <= 100; i++) {
 if (i == 1) {
    console.log('這個人今年1歲了, 它出生了');
 } else if (i == 100) {
    console.log('這個人今年100歲了,它死了');
  } else {
       console.log('這個人今年' + i + '歲了');
  }
}

for循環(huán)因為有了計數(shù)器的存在,還可以重復(fù)的執(zhí)行某些操作,比如做一些算術(shù)運算。

 <script>
        // 求 1~100 之間的整數(shù)累加和
        //  需要循環(huán)100次,我們需要一個計數(shù)器  i  
        // 我們需要一個存儲結(jié)果的變量 sum ,但是初始值一定是 0
        // 核心算法:1 + 2 + 3 + 4 ....   ,sum  =  sum + i;
        var sum = 0; // 求和 的變量
        for (var i = 1; i <= 100; i++) {
            // sum = sum + i;
            sum += i;
        }
        console.log(sum); // 5050
    </script>
 // 1. 求1-100之間所有數(shù)的平均值   需要一個 sum 和的變量 還需要一個平均值 average 變量
        var sum = 0;
        var average = 0;
        for (var i = 1; i <= 100; i++) {
            sum = sum + i;
        }
        average = sum / 100;
        console.log(average);

        // 2. 求1-100之間所有偶數(shù)和奇數(shù)的和   我們需要一個偶數(shù)的和變量 even  還需要一個奇數(shù) odd
        var even = 0;
        var odd = 0;
        for (var i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                even = even + i;
            } else {
                odd = odd + i;
            }
        }
        console.log('1~100 之間所有的偶數(shù)和是' + even);
        console.log('1~100 之間所有的奇數(shù)和是' + odd);

        // 3. 求1-100之間所有能被3整除的數(shù)字的和   
        var result = 0;
        for (var i = 1; i <= 100; i++) {
            if (i % 3 == 0) {
                // result = result + i;
                result += i;
            }
        }
        console.log('1~100之間能夠被3整數(shù)的數(shù)字的和是:' + result);
    </script>
  • 求學(xué)生成績案例
<script>
        // 彈出輸入框輸入總的班級人數(shù)(num)
        // 依次輸入學(xué)生的成績( 保存起來 score), 此時我們需要用到
        // for 循環(huán), 彈出的次數(shù)跟班級總?cè)藬?shù)有關(guān)系 條件表達(dá)式 i <= num
        // 進(jìn)行業(yè)務(wù)處理: 計算成績。 先求總成績( sum), 之后求平均成績( average)
        // 彈出結(jié)果
        var num = prompt('請輸入班級的總?cè)藬?shù):'); // num 總的班級人數(shù)
        var sum = 0; // 求和的變量
        var average = 0; // 求平均值的變量
        for (var i = 1; i <= num; i++) {
            var score = prompt('請您輸入第' + i + '個學(xué)生成績');
            // 因為從prompt取過來的數(shù)據(jù)是 字符串型的需要轉(zhuǎn)換為數(shù)字型
            sum = sum + parseFloat(score);
        }
        average = sum / num;
        alert('班級總的成績是' + sum);
        alert('班級平均分是:' + average);
    </script>

1.2 雙重for循環(huán)

  • 雙重 for 循環(huán)概述

    循環(huán)嵌套是指在一個循環(huán)語句中再定義一個循環(huán)語句的語法結(jié)構(gòu),例如在for循環(huán)語句中,可以再嵌套一個for 循環(huán),這樣的 for 循環(huán)語句我們稱之為雙重for循環(huán)。

  • 雙重 for 循環(huán)語法

    for (外循環(huán)的初始; 外循環(huán)的條件; 外循環(huán)的操作表達(dá)式) {
        for (內(nèi)循環(huán)的初始; 內(nèi)循環(huán)的條件; 內(nèi)循環(huán)的操作表達(dá)式) {  
           需執(zhí)行的代碼;
       }
    }
    
    • 內(nèi)層循環(huán)可以看做外層循環(huán)的循環(huán)體語句
    • 內(nèi)層循環(huán)執(zhí)行的順序也要遵循 for 循環(huán)的執(zhí)行順序
    • 外層循環(huán)執(zhí)行一次,內(nèi)層循環(huán)要執(zhí)行全部次數(shù)
  • 打印n行n列的星星

    var rows = prompt('請您輸入行數(shù):');
    var cols = prompt('請您輸入列數(shù):');
    var str = '';
          for (var i = 1; i <= rows; i++) {
              for (var j = 1; j <= cols; j++) {
                  str = str + '★';
              }
              // 每次滿 cols個星星 就 加一次換行 \n
              str += '\n';
          }
          console.log(str);
    

    核心邏輯:

    1.內(nèi)層循環(huán)負(fù)責(zé)一行打印多少個星星

    2.外層循環(huán)負(fù)責(zé)打印多少行

  • 打印倒三角形案例

<script>
        var str = '';
        for (var i = 1; i <= 10; i++) { // 外層循環(huán)控制行數(shù)
            for (var j = i; j <= 10; j++) { // 里層循環(huán)打印的個數(shù)不一樣  j = i
                str = str + '★';
            }
            str += '\n';
        }
        console.log(str);
    </script>
  • 九九乘法表案例
<script>
        // 一共有9行,但是每行的個數(shù)不一樣,因此需要用到雙重 for 循環(huán)
        // 外層的 for 循環(huán)控制行數(shù) i ,循環(huán)9次 ,可以打印 9 行  
        // 內(nèi)層的 for 循環(huán)控制每行公式  j  
        // 核心算法:每一行 公式的個數(shù)正好和行數(shù)一致, j <= i;
        // 每行打印完畢,都需要重新?lián)Q一行
        var str = '';
        for (var i = 1; i <= 9; i++) { // 外層循環(huán)控制行數(shù)
            for (var j = 1; j <= i; j++) { // 里層循環(huán)控制每一行的個數(shù)  j <= i
                // 1 × 2 = 2
                // str = str + '★';
                str += j + '×' + i + '=' + i * j + '\t'; // 每個公式之間間隔一個tab鍵
            }
            str += '\n';
        }
        console.log(str);
    </script>
  • for 循環(huán)小結(jié)

    • for 循環(huán)可以重復(fù)執(zhí)行某些相同代碼
    • for 循環(huán)可以重復(fù)執(zhí)行些許不同的代碼,因為我們有計數(shù)器
    • for 循環(huán)可以重復(fù)執(zhí)行某些操作,比如算術(shù)運算符加法操作
    • 隨著需求增加,雙重for循環(huán)可以做更多、更好看的效果
    • 雙重 for 循環(huán),外層循環(huán)一次,內(nèi)層 for 循環(huán)全部執(zhí)行
    • for 循環(huán)是循環(huán)條件和數(shù)字直接相關(guān)的循環(huán)

1.3 while循環(huán)

while語句的語法結(jié)構(gòu)如下:

while (條件表達(dá)式) {
    // 循環(huán)體代碼 
}

執(zhí)行思路:

  • 1 先執(zhí)行條件表達(dá)式,如果結(jié)果為 true,則執(zhí)行循環(huán)體代碼;如果為 false,則退出循環(huán),執(zhí)行后面代碼
  • 2 執(zhí)行循環(huán)體代碼
  • 3 循環(huán)體代碼執(zhí)行完畢后,程序會繼續(xù)判斷執(zhí)行條件表達(dá)式,如條件仍為true,則會繼續(xù)執(zhí)行循環(huán)體,直到循環(huán)條件為 false 時,整個循環(huán)過程才會結(jié)束

注意:

  • 使用 while 循環(huán)時一定要注意,它必須要有退出條件,否則會成為死循環(huán)

  • while循環(huán)案例

 <script>
        // 1. 打印人的一生,從1歲到100歲
        var i = 1;
        while (i <= 100) {
            console.log('這個人今年' + i + '歲了');
            i++;
        }
        // 2. 計算 1 ~ 100 之間所有整數(shù)的和
        var sum = 0;
        var j = 1;
        while (j <= 100) {
            sum += j;
            j++
        }
        console.log(sum);

        // 3. 彈出一個提示框, 你愛我嗎?  如果輸入我愛你,就提示結(jié)束,否則,一直詢問。
        var message = prompt('你愛我嗎?');
        while (message !== '我愛你') {
            message = prompt('你愛我嗎?');
        }
        alert('我也愛你啊!');
    </script>

1.4 do-while循環(huán)

do... while 語句的語法結(jié)構(gòu)如下:

do {
    // 循環(huán)體代碼 - 條件表達(dá)式為 true 時重復(fù)執(zhí)行循環(huán)體代碼
} while(條件表達(dá)式);

執(zhí)行思路

  • 1 先執(zhí)行一次循環(huán)體代碼

  • 2 再執(zhí)行條件表達(dá)式,如果結(jié)果為 true,則繼續(xù)執(zhí)行循環(huán)體代碼,如果為 false,則退出循環(huán),繼續(xù)執(zhí)行后面代碼

    注意:先再執(zhí)行循環(huán)體,再判斷,do…while循環(huán)語句至少會執(zhí)行一次循環(huán)體代碼

1.5 continue、break

continue 關(guān)鍵字用于立即跳出本次循環(huán),繼續(xù)下一次循環(huán)(本次循環(huán)體中 continue 之后的代碼就會少執(zhí)行一次)。

例如,吃5個包子,第3個有蟲子,就扔掉第3個,繼續(xù)吃第4個第5個包子,其代碼實現(xiàn)如下:

 for (var i = 1; i <= 5; i++) {
     if (i == 3) {
         console.log('這個包子有蟲子,扔掉');
         continue; // 跳出本次循環(huán),跳出的是第3次循環(huán) 
      }
      console.log('我正在吃第' + i + '個包子呢');
 }

運行結(jié)果:

  • 求1~100 之間, 除了能被7整除之外的整數(shù)和
        var sum = 0;
        for (var i = 1; i <= 100; i++) {
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
        }
        console.log(sum);

break 關(guān)鍵字用于立即跳出整個循環(huán)(循環(huán)結(jié)束)。

例如,吃5個包子,吃到第3個發(fā)現(xiàn)里面有半個蟲子,其余的不吃了,其代碼實現(xiàn)如下:

for (var i = 1; i <= 5; i++) {
   if (i == 3) {
       break; // 直接退出整個for 循環(huán),跳到整個for下面的語句
   }
   console.log('我正在吃第' + i + '個包子呢');
 }

運行結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容