JavaScript学习笔记(三)——控制流

分支判定

为了让程序拥有自主选择能力,JS语言加入了分支判定功能。可以让程序决定执行哪一段代码,不执行哪一段代码,从而实现程序结果的多样化。

分支判定有两种:ifswitch

  • if语句

语法1:

if (表达式) { 代码段 } else { 代码段 }

运行规则:
当表达式结果为真时,执行if代码段;当表达式结果为假时,执行else代码段。

语法2:

if (表达式) {代码段}

运行规则:
当表达式结果为真时,执行if代码段;当表达式结果为假时,不执行任何内容。

语法3:

	if (表达式1) {
        代码段1
    } else if (表达式2) {
        代码段2
    } else if (表达式3) {
        代码段3
    } ...

运行规则:
当表达式1为真时,执行代码段1,执行完毕跳出分支判断。当表达式1为假时,去判定表达式2,为真时,执行代码段2。当表达式2为假时,去判定表达式3,为真时,执行代码段3。当表达式3为假时,继续往后判定。 直到遇见为真的表达式,就执行对应的代码段,或者都不符合,就不会进入分支代码。

语法4:

    if (表达式1) {
        代码段1
    } else if (表达式2) {
        代码段2
    } else {
        代码段3
    }

运行规则:
当表达式1为真时,执行代码段1。否则判定表达式2,为真时,执行代码段2。否则执行代码段3。都不符合,就不会进入分支代码。

注: 整个if语句由3部分组成if () {}else if () {}else {}除了第一部分必须有之外,其余部分都可以省略。第三部分只能出现一次,第二部分可以出现多次。

  • switch语句

语法:

    switch (表达式) {
        case 结果1: 
            code...
        break;
        case 结果2: 
            code...
        break;
        case 结果3: 
            code...
        break;
        case 结果4: 
            code...
        break;
        case 结果5: 
            code...
        break;
        case ……
            code...
        break;
        default: 
            code...
        break;
    }

执行规则:

  • 当表达式的结果为对应的case结果时,执行对应的代码
  • case 后面的内容最终必须是固定的值,不可以是范围表达式
  • break的作用是停止代码,跳出switch语句
  • default的作用是当任何case都没有对应时,执行default下面的代码
  • 在比较case的值时,使用的是全等比较

注: 如果没有break,则会出现落空现象。 落空现象: 指的是会执行下一个case语句中的代码的现象。

  • 三元运算符(三目运算符)
    指的是对if else语句的一种简化方式

语法:

条件 ? 结果1 : 结果2

运行规则:
当条件为真时,执行结果1;当条件为假时,执行结果2。

  • 循环结构
    当有大量的重复性的代码时,我们可以使用循环语句来解决。

while循环
语法:

    while (条件) {
        code...
    }

注: 一定记得在语句中改变条件表达式中的变量,否则会死循环。

do-while循环
语法:

    do {
        code...
    } while (条件);

注:一定记得在语句中改变条件表达式中的变量,否则会死循环。

注:无论条件是否达成,都会执行一次do里面的语句。

for循环
语法:

    for (初始化; 条件; 改变初始化条件) {
        code...
    }

注: 改变初始化条件不一定是 i++。 i += 2也是可以的

注: 该语法有变种写法,但是不推荐使用

注: 循环变量在for循环结束之后依旧可用

  • break
    break关键字,用于打断循环的执行。
for (var i = 0; i < 10; i++) {
    if (i === 3) {
        break;
    }
    console.log(i);
}

以上程序只输出0、1、2,当i为3的时候,i === 3结果为真,将执行break,打断循环的执行。

  • continue
    continue关键字,用于跳过当前层循环,进入下一次循环。
for (var i = 0; i < 5; i++) {
    if (i === 3) {
        continue;
    }
    console.log(i);
}

以上程序输出结果为0、1、2、4,因为当i为3时,i === 3为真,将执行continue,跳过i为3的这层循环,即跳过当前层循环,进入下一层循环。

注: continue和break只能够用在循环体内

案例

根据用户输入的年龄,判定用户是否成年

        var year = +prompt("请输入年龄");
        if(year >= 18){
            alert("恭喜你,你成年了");
        }else{
            alert("很抱歉,你未成年");
        }

根据用户输入的成绩,判定成绩等级

        var score = +prompt("请输入分数");
        if(score >= 0 && score <= 100){
            if(score < 60){
            alert("不及格");
            }
            else if(score < 70){
                alert("及格");
            }
            else if(score < 80){
                alert("良好");
            }
            else if(score < 90){
                alert("优秀");
            }
            else if(score <= 100){
                alert("非常优秀");
            }
        }else{
            alert("输入的分数不规范");
        }

根据用户输入的星期,判定星期几

        var week = prompt("请输入0~6之间的整数,包括0和6");
        switch(week){
            case "0":
                alert("今天是星期天");
            break;
            case "1":
                alert("今天是星期一");
            break;
            case "2":
                alert("今天是星期二");
            break;
            case "3":
                alert("今天是星期三");
            break;
            case "4":
                alert("今天是星期四");
            break;
            case "5":
                alert("今天是星期五");
            break;
            case "6":
                alert("今天是星期六");
            break;    
            default:
                alert("您输入的数字不在规定范围内!");
            break;    
        }

根据用户输入的年份,判定是否是闰年

        var year = +prompt("请输入年份");
        if(year % 4 ===0 && year % 100 != 0 || year % 400 === 0){
            alert(year + "是闰年");
        }else{
            alert(year + "不是闰年");
        }

1~100所有偶数和

        var sum = 0;
        for (var i = 1;i <= 100;i++){
            if(i % 2 === 0){
                // console.log(i);
                sum += i;
            }
        }
        console.log("1~100所有偶数和为:" + sum);

1~100所有数的和

        var i = 1;
        var sum = 0;
        do{
            sum += i;
            // console.log(i++);
        }while(i <= 100);
        console.log("1~100所有数的和为:" + sum);
       var i = 1;
        var sum = 0;
        while(i<=100){
            sum += i;
            i++;
            // console.log(i++);
        }
        console.log("1~100所有数的和为:" + sum);

打印20个素数
方式1:while循环

        // 打印20个素数——while循环
        var start = 56;
        // 定义一个变量,用于记录质数的个数
        var count = 0;
        // 循环判定,只要count不是20,循环继续
        while(count < 20){
            // 每一次循环在判定一个新的数字是否是质数,判定的就是start所以要让start++
            start++;
            //下面代码在判定start变量所保存的数是否是质数
            var num = start;
            var isZ = true;
            for(var i = 2; i < num; i++){
                if(num % i === 0){
                    isZ = false;
                    break;
                }
            }
            if(isZ === true){
                console.log(num);
                // 累计
                count++;
            }
        }

方式2:for循环

        // 打印20个素数——for循环
        var start = 123;
        // for循环
        for (var count = 0; count < 20; start++){
            var num = start;
            var isZ = true;
            for(var i = 2; i < num; i++){
                if(num % i === 0){
                    isZ = false;
                    break;
                }
            }
            if(isZ === true){
                console.log(num);
                count++;
            }
        }

打印任意范围内的素数

        var min = +prompt("请输入素数范围最小值","");
        var max = +prompt("请输入素数范围最大值","");
        for(var i = min ; i < max ; i++){
            for(var j = 2 ; j < i ; j++){
                if(i % j === 0){
                    break;
                }else if(j === i-1){
                    document.write(i+" ");
                }
            }
        }

猜数字游戏

        // 生成一个0~100的随机数
        var random = parseInt(Math.random() * 100);
        var startNum = 0;
        var endNum = 100;
        // console.log(random);
        do{
            // 提示用户
            var num = +prompt("请输入一个"+startNum+"~"+endNum+"之间的数字");
            if(random > num){
                alert("猜小了,游戏继续");
                startNum = num;
            }else if(random < num){
                alert("猜大了,游戏继续");
                endNum = num;
            }else{
                alert("恭喜你猜对了,游戏结束");
            }
        }while(num != random);

判断一个整数,属于哪个范围:大于0;小于0;等于0

        var i = +prompt("请输入一个数","");
        if(i > 0){
            alert("大于0");
        }else if(i < 0){
            alert("小于0");
        }else if(i === 0){
            alert("等于0");
        }

判断一个整数是偶数还是奇数,并输出判断结果

        var i = +prompt("请输入一个整数","");
        if(i % 2 == 0){
            alert(i + "是偶数");
        }else if(i % 2 != 0){
            alert(i + "是奇数");
        }

可以简化成:

		var i = +prompt("请输入一个整数","");
		alert((i % 2 == 0) ? "偶数" : "奇数");

开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适
方式1:

        var i = +prompt("请输入你的身高,单位cm","");
        var k = +prompt("请输入你的体重,单位kg","");
        k *= 2;
        var j = (i - 108) * 2;
        if(k >= j-10 && k <= j+10){
            alert("体重合格");
        }else if(k < j-10){
            alert("偏瘦");
        }else if(k > j+10){
            alert("偏胖");
        }

方式2:

        var height = +prompt("请输入你的身高(厘米)");
        var weight = +prompt("请输入你的体重(斤)");
        // 根据公式(身高-108)*2=体重
        var standard = (height - 108) * 2;
        if(weight > standard){
            if(weight - standard > 10){
                alert("该减肥了");
            }else{
                alert("标准体重");
            }
        }else if(weight < standard){
            if(standard - weight > 10){
                alert("偏瘦");
            }else{
                alert("标准体重");
            }
        }

根据输入的三个数字,判断是这一年的第几天

        var year = +prompt("请输入年份","");
        var month = +prompt("请输入"+year+"年的第几个月","");
        var day = +prompt("请输入"+year+"年"+month+"月的几号","");
        var isRun;
        var count = 0;

        // 判断是闰年还是平年
        if(year % 4 === 0 && year % 100 != 0 || year % 400 === 0){
            console.log("闰年,366天");
            isRun = true;
        }else{
            console.log("平年,365天");
            isRun = false;
        }

        for(var i = 0 ; i < month ; i++){
            switch(i){
                // 闰年加29天,平年加28天
                case 2:
                    if(isRun){
                        // 闰年
                        count += 29;
                    }else{
                        // 平年
                        count += 28;
                    }
                break;    

                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    count += 31;
                break;
                
                case 4:
                case 6:
                case 9:
                case 11:
                    count += 30;
                break;    
            }
        }
        // 将之前的月份的天数加上当月已过天数
        count += day;
        alert(count);

可通过使用三元运算符来简化程序:

        var year = +prompt("请输入年份","");
        var month = +prompt("请输入"+year+"年的第几个月","");
        var day = +prompt("请输入"+year+"年"+month+"月的几号","");
        var isRun;
        var count = 0;

        // 判断是闰年还是平年
        isRun = year % 4 === 0 && year % 100 != 0 || year % 400 === 0 ? true : false;

        for(var i = 0 ; i < month ; i++){
            switch(i){
                // 闰年加29天,平年加28天
                case 2:
                    // 简化,使用三目运算
                    count += isRun ? 29 : 28;
                break;    

                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    count += 31;
                break;

                case 4:
                case 6:
                case 9:
                case 11:
                    count += 30;
                break;    
            }
        }
        // 将之前的月份的天数加上当月已过天数
        count += day;
        alert(count);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值