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)
                }
            }