1. 程式人生 > 其它 >JavaScript合集(流程控制語句)

JavaScript合集(流程控制語句)

流程控制

  1. 條件判斷語句
  2. 條件分支語句
  3. 迴圈語句

條件判斷語句

if語句

語法:
	if(條件表示式){
		語句
	}
	-------
	  if(a > 10){
            alert('a比10大')
        }

if-else語句

語法:
	if(條件表示式){
       語句...
       } else {
  		語句...      
    }
   -------------------
   let age = 10
    if(age > 18){
       alert("今年成年了")
       }else{
           alert("沒有成年")
       }

if-else-if

語法:
	if(條件表示式){
       語句...
       } else if(條件表示式){
  		語句...      
    }
    -----
   會自上向下依次對if後的表示式進行判斷,如果表示式條件為true,就執行當前的語句,
           如果為false,就繼續向下執行,
           如果都不滿足,就執行最後的else之後的語句
  --------------------
      if(age >= 100){
            alert('你真是一個長壽的人!')
        }else if(age >= 80){
            alert('你比樓上那位還年輕不小!')
        }else if(age >= 60 ){
            alert('你已經退休了!')
        }else if(age >= 30){
            alert('你已經步入中年了!')
        }else if(age >= 18){
            alert('你已經成年了!')
        }else{
            alert('你還未成年!')
        }

小練習:

 - 練習1:
       編寫一個程式,獲取一個使用者輸入的整數。然後通過程式顯示這個數是奇數還是偶數。
------------------------
 	//它會將使用者輸入的內容以字串的形式返回,可以通過變數來接收
	 let num = +prompt("請輸入一個整數:")
        if (isNaN(num) || num % 1 !== 0) {
            alert("你的輸入有問題,請輸入整數!")
        } else {
            if (num % 2) {
                alert(num + "這個數是奇數")
            } else {
                alert(num + "這個數是偶數")
            }
        }
 - 練習2:
            從鍵盤輸入小明的期末成績:
                    當成績為100時,'獎勵一輛BMW'
                    當成績為[80-99]時,'獎勵一臺iphone'
                    當成績為[60-79]時,'獎勵一本參考書'
                    其他時,什麼獎勵也沒有
 ----------------
	 let score = +prompt("請輸入您的期末成績:")

        if (isNaN(score) || score < 0 || score > 100) {
            alert('請輸入一個合法的分數')
        } else {
            if (score === 100) {
                alert('獎勵一輛BMW')
            } else if (score >= 80 && score <= 99) {
                alert('獎勵一臺iphone')
            } else if (score >= 60 && score <= 79) {
                alert('獎勵一本參考書')
            } else {
                alert('什麼獎勵也沒有')
            }
        }
      - 練習3:
            大家都知道,男大當婚,女大當嫁。那麼女方家長要嫁女兒,當然要提出一定的條件:
                高:180cm以上; 富:1000萬以上; 帥:500以上;
                如果這三個條件同時滿足,則:'我一定要嫁給他'
                如果三個條件有為真的情況,則:'嫁吧,比上不足,比下有餘。'
                如果三個條件都不滿足,則:'不嫁!'
-----------------
       let height = +prompt('請輸入你的身高(釐米):')
        let money = +prompt('請輸入你的身價(萬):')
        let face = +prompt('請輸入你的顏值(畫素):')
      if(height>180 && money>1000 && face>500){
            alert('我一定要嫁給他!')
        }else if(height>180 || money>1000 || face>500){
            alert('嫁吧,比上不足,比下有餘。')
        }else{
            alert('不嫁!')
        }

switch語句

- 語法:
                        switch(表示式){
                            case 表示式:
                                程式碼...
                                break
                            case 表示式:
                                程式碼...
                                break
                            case 表示式:
                                程式碼...
                                break
                            case 表示式:
                                程式碼...
                                break
                            default:
                                程式碼...
                                break
                        }

也就是說:

​ 執行的流程

	-  switch語句在執行時,會依次將switch後的表示式和case後的表示式進行全等比較        
	- 如果比較結果為true,則自當前case處開始執行程式碼        
	- 如果比較結果為false,則繼續比較其他case後的表示式,直到找到true為止        
	- 如果所有的比較都是false,則執行default後的語句-
  • 注意:
    - 當比較結果為true時,會從當前case處開始執行程式碼
    • 也就是說case是程式碼執行的起始位置
    • 這就意味著只要是當前case後的程式碼,都會執行
  • 可以使用break來避免執行其他的case-
    - 總結
    • switch語句和if語句的功能是重複,switch能做的事if也能做,反之亦然。
    • 它們最大的不同在於,switch在多個全等判斷時,結構比較清晰

while迴圈

語句:
while(條件表示式){
      語句....
      }
-----------------
    三個條件要點:
		1.初始化表示式(初始化變數)
        2.條件表示式(設定迴圈條件)
        3.更新表示式(修改初始化變數)
---------
       let i = 0
        while(i<5){
              alert('666')
                i++
              }
----------------
小練習:
	假設銀行存款的年利率為5%,問1000快存多少年可以變成5000塊
        let year = 0
        let money = 1000
        while(money < 5000){
            money *= 1.05 // 迴圈沒執行一次,就相當於錢存了一年
            year++
        }
        console.log(`需要存${year}年,最終的錢數為${money}元!`)

執行流程:

​ while語句在執行時,會先對錶達式進行判斷,

​ 如果結果為true,則執行迴圈體,執行完畢,繼續判斷,

​ 如果為true,則再次執行迴圈體,執行完畢,繼續判斷,如此重複

​ 直到條件表示式結果為false時,迴圈結束

do-while語句

 do-while迴圈
                - 語法:
                    do{
                        語句...
                    }while(條件表示式)

                - 執行順序:
                    do-while語句在執行時,會先執行do後的迴圈體,
                        執行完畢後,會對while後的條件表示式進行判斷
                        如果為false,則迴圈終止
                        如果為true,則繼續執行迴圈體,以此類推

                    和while的區別:
                        while語句是先判斷再執行
                        do-while語句是先執行再判斷

                        實質的區別:
                            do-while語句可以確保迴圈至少執行一次

for語句

	for迴圈
                - for迴圈和while沒有本質區別,都是用來反覆執行程式碼
                - 不同點就是語法結構,for迴圈更加清晰
                - 語法:
                    for(①初始化表示式; ②條件表示式; ④更新表示式){
                        ③語句...
                    }

                - 執行流程:
                    ① 執行初始化表示式,初始化變數
                    ② 執行條件表示式,判斷迴圈是否執行(true執行,false終止)
                    ③ 判斷結果為true,則執行迴圈體
                    ④ 執行更新表示式,對初始化變數進行修改
                    ⑤ 重複②,知道判斷為false為止

                - 初始化表示式,在迴圈的整個的生命週期中只會執行1次
                - for迴圈中的三個表示式都可以省略
                - 使用let在for迴圈的()中宣告的變數是區域性變數,只能在for迴圈內部訪問
                    使用var在for迴圈的()中宣告的變數可以在for迴圈的外部訪問
                - 建立死迴圈的方式:
                    while(1){}
                    for(;;){}
   ----------------------
   for(let i = 0; i < 5; i++){
       console.log(i)
   }

小練習

練習1:
	求100以內所有3的倍數(求他們的個數和總和)
    let count = 0
        let sum = 0
        for (let i = 1; i <= 100; i++) {
            if (i % 3 === 0) {
                count++
                sum += i
            }
        }
        console.log(`他們的個數是${count},總和是${sum}`)
----------------------------------
練習2:
	  求 1000 以內的水仙花數(1-1000)
                - 水仙花數
                - 一個n位數(n >= 3),如果它各個位上數字的n次冪之和還等於這個數,那麼這個數就是一個水仙花數
                    - 153 --> 1  5  3 --> 1  125  27 --> 153
法1:
      let count = 0
        for (let i = 100; i < 1000; i++) {
            //1. 先得到1000以內得所有數字
            // 2.得到數字得個位,十位,百位得數字,進行運算
            // 獲取個位的
            let oneNum = i % 10
            // 獲取十位的
            let twoNum = parseInt(i / 10 % 10)
            // 獲取百位的
            let threeNum = parseInt(i / 100)
            console.log()
            let allSum = oneNum ** 3 + twoNum ** 3 + threeNum ** 3
            if (allSum === i) {
                console.log("水仙花數" + i)
                count++
            }
        }
        console.log('水仙花的個數是:' + count)

法2:
	   for(let i=100; i<1000; i++){
            let strI = i + ""
            if(strI[0] ** 3 + strI[1] ** 3 + strI[2] ** 3 === i){
                console.log(i)
            }
        }
---------------------------------------
練習3:
	  獲取使用者輸入的大於1的整數(暫時不考慮輸錯的情況)
                然後編寫程式碼檢查這個數字是否是質數,並列印結果

            質數
                - 一個數如果只能被1和它本身整除,那麼這個數就是質數
                - 1既不是質數也不是合數
            // 獲取使用者輸入的數值
       let num = +prompt("請輸入一個大於1的整數:")

            // 用來記錄num的狀態,預設為true,num是質數
            let flag = true

            for(let i=2; i<num; i++){
                if(num % i === 0){
                   // 如果num能被i整除,說明num一定不是質數   
                   // 當迴圈執行時,如果從來沒有進入過判斷(判斷程式碼沒有執行),則說明9是質數
                   // 如果判斷哪怕只執行了一次,也說明 9 不是質數  
                   flag = false
                }
            }

            if(flag){
                alert(`${num}是質數!`)
            }else{
                alert(`${num}不是質數!`)
            }
倒三角:
	for (let i = 0; i < 5; i++) {
                for (let j = 0; j < 5 - i; j++) {
                    document.write("*&nbsp;&nbsp;")
                }

                document.write("<br>")
            }
正三角:
	for (let i = 0; i < 5; i++) {
                for (let j = 0; j < i + 1; j++) {
                    document.write("*&nbsp;&nbsp;")
                }

                document.write("<br>")
            }
矩形:
	    for (let i = 0; i < 5; i++) {
                // 建立一個內層迴圈來控制圖形的寬度
                for (let j = 0; j < 5; j++) {
                    document.write("*&nbsp;&nbsp;")
                }

                document.write("<br>")
            }
九九乘法表小練習:
//只要掌握正三角的方法,寫九九乘法表亦如反掌
        for (let i = 0; i < 9; i++) {
            for (let j = 0; j < i + 1; j++) {
                document.write(`${i + 1}*${j + 1}=${(i + 1) * (j + 1)}&nbsp;&nbsp;`)
            }
            document.write("<br>")
        }

break和continue的區別

           break和continue
                - break
                    - break用來終止switch和迴圈語句
                    - break執行後,當前的switch或迴圈會立刻停止
                    - break會終止離他最近的迴圈

                - continue
                    - continue用來跳過當次迴圈

----------------------------
           for (let i = 0; i < 5; i++) {
                console.log(i)

                for (let j = 0; j < 5; j++) {
                    if (j === 1) continue
                    console.log("內層迴圈--->", j)
                }
            }