• 03 【流程控制语句】


    3.流程控制语句

    3.1 基本介绍

     *
     * 流程控制语句
     * 	- JS中的程序是从上到下一行一行执行的
     * 	- 通过流程控制语句可以控制程序执行流程,
     * 		使程序可以根据一定的条件来选择执行
     *  - 语句的分类:
     * 		1.条件判断语句
     * 		2.条件分支语句
     * 		3.循环语句			
     *
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
     *
     * prompt()可以弹出一个提示框,该提示框中会带有一个文本框,
     * 	用户可以在文本框中输入一段内容,该函数需要一个字符串作为参数,该字符串将会作为提示框的提示文字
    
     * 用户输入的内容将会作为函数的返回值返回,可以定义一个变量来接收该内容,prompt()函数的返回值是String类型的
     *
    //score就是小明的期末成绩
    var score = prompt("请输入小明的期末成绩(0-100):");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.2 if(条件分支语句)

    条件判断语句也称为if语句
    语法一:

    if(条件表达式){  
       语句...  
    }  
    
    • 1
    • 2
    • 3
     执行流程:  
     if语句执行时,会先对条件表达式进行求值判断,  
     如果值为true,则执行if后的语句  
     如果值为false,则不执行  
    
    • 1
    • 2
    • 3
    • 4

    语法二:

    if(条件表达式){  
    	语句...  
    }else{  
    	语句...  
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
     执行流程:  
    	if...else语句执行时,会对条件表达式进行求值判断,  
    		如果值为true,则执行if后的语句  
    		如果值为false,则执行else后的语句  
    
    • 1
    • 2
    • 3
    • 4

    语法三:

    if(条件表达式){  
    	语句...  
    }else if(条件表达式){  
    	语句...  
    }else if(条件表达式){  
    	语句...  
    }else if(条件表达式){  
    	语句...  
    }else{  
    	语句...  
    }	  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
     执行流程  
     if...else if...else语句执行时,会自上至下依次对条件表达式进行求值判断,  
        如果判断结果为true,则执行当前if后的语句,执行完成后语句结束。  
        如果判断结果为false,则继续向下判断,直到找到为true的为止。  
        如果所有的条件表达式都是false,则执行else后的语句  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 条件语句可以嵌套(最好不要嵌套超过三层)
    • if-elseif-else 语句注意条件的区间(下一级条件的成立是建立在上一级条件不成立的条件下)
    • 可以只有 if 和 else if

    3.3 switch(条件分支语句)

    switch语句
    语法:

    switch (变量/表达式) {
        case 常量值/变量/表达式:
            语句;
            break;
        case 常量值/变量/表达式:
            语句;
            break;
        default:
            语句;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    执行流程:
    switch…case…语句在执行时,会依次将case后的表达式的值和switch后的表达式的值进行全等比较,
    如果比较结果为false,则继续向下比较。如果比较结果为true,则从当前case处开始向下执行代码。
    如果所有的case判断结果都为false,则从default处开始执行代码。

    • 与其他高级语言不同,在 JS 中 case 后不仅仅只能跟常量值,还可以跟变量和表达式
    • 注意 switch 语句的 “开关” 特性(遇见 break 才跳出 switch,否则直接进入下一个 case),合理运用好 break(例如不加 break 可以实现多条 case 共用同一个语句体)
    • default 语句不是必须的

    3.4 while 循环语句

    通过循环语句可以反复执行某些语句多次
    while循环
    语法:

    while(条件表达式){  
        语句...  
    }  
    
    • 1
    • 2
    • 3

    执行流程:
    while语句在执行时,会先对条件表达式进行求值判断,
    如果判断结果为false,则终止循环
    如果判断结果为true,则执行循环体
    循环体执行完毕,继续对条件表达式进行求值判断,依此类推

    do…while循环
    语法:

    do{  
    语句...  
    }while(条件表达式)  
    
    • 1
    • 2
    • 3

    执行流程
    do…while在执行时,会先执行do后的循环体,然后在对条件表达式进行判断,
    如果判断判断结果为false,则终止循环。
    如果判断结果为true,则继续执行循环体,依此类推

    和while的区别:
    while:先判断后执行
    do…while: 先执行后判断
    do…while可以确保循环体至少执行一次。

    3.5 for 循环语句

    for循环
    语法:

    for(1初始化表达式 ; 2条件表达式 ; 4更新表达式){  
        3语句...  
    }  
    
    • 1
    • 2
    • 3

    执行流程:
    首先执行①初始化表达式,初始化一个变量,
    然后对②条件表达式进行求值判断,如果为false则终止循环
    如果判断结果为true,则执行③循环体
    循环体执行完毕,执行④更新表达式,对变量进行更新。
    更新表达式执行完毕重复②

    for in 循环

    for 循环的一个变体是 for ... in 循环,它可以把一个对象的所有属性依次循环出来:

    var o = {
        name: "Jerry",
        age: 20,
        city: "Beijing"
    };
    
    for (var key in o) {
        console.log(key + ": " + o[key]);
    }
    /*
    "name: Jerry"
    "age: 20"
    "city: Beijing"
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    要过滤掉对象继承的属性,用 hasOwnProperty() 来实现:

    var o = {
        name: "Jerry",
        age: 20,
        city: "Beijing"
    };
    
    for (var key in o) {
        if (o.hasOwnProperty(key)) {
            console.log(key + ": " + o[key]);
        }
    }
    /*
    "name: Jerry"
    "age: 20"
    "city: Beijing"
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    由于数组也是对象,而它的每个元素的索引被视为对象的属性,因此,for ... in 循环可以直接循环出数组的索引:

    var a = ['A', 'B', 'C'];
    
    for (var i in a) {
        console.log(i + ": " + a[i]);
    }
    /*
    0: A
    1: B
    2: C
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    请注意,for ... in 对数组的循环得到的索引是 String 而不是 Number

    死循环

    while(true){  
    
    }  
    
    for(;;){  
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.6 break 和 continue

    break;:立即终止本层次循环。

    continue;:立即跳过本层次循环,提前进入本层次的下一次循环。

    3.7 label 表达式

    label 是一个标签,可以使用 breakcontinue 使程序跳转到这个标签处执行(执行:breakcontinue),从而改变程序的执行流程。

    // 注意:label 不是一个特定的关键字,可以随便取名
    label: for (var i = 0; i < 10; i++) {
        for (var j = 0; j < 10; j++) {
            if (i + j === 6) {
                console.log("j=" + j);
                break label;
            }
        }
        console.log("i=" + i);
    }
    /*
    j=6
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    label: for (var i = 0; i < 10; i++) {
        for (var j = 0; j < 10; j++) {
            if (i + j === 6) {
                console.log("j=" + j);
                continue label;
            }
        }
        console.log("i=" + i);
    }
    /*
    j=6
    j=5
    j=4
    j=3
    j=2
    j=1
    j=0
    i=7
    i=8
    i=9
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    // label + break 配合可以用在循环外
    label: {
        if (1 > 0) {
            console.log("1");
            break label;
        }
        console.log("2");
    }
    /*
    1
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.8 初识算法

    算法:解决方案的准确而完整的描述!

    • 输入
    • 输出
    • 有穷性
    • 确定性
    • 可行性

    好的算法还要满足:可读性、健壮性!

  • 相关阅读:
    「学习笔记」双连通分量、割点与桥
    异常exception和错误error即推荐用法@sneakythrow
    Java学习——对象和类(二)
    Pyecharts教程(七):使用pyecharts创建堆叠柱状图的示例
    Spring Boot 中 Controller 接口参数注解全攻略与实战案例详解
    【java学习】this关键字(27)
    第86步 时间序列建模实战:Transformer回归建模
    composer update抛出异常的处理
    C++ 图书馆管理系统
    Codeforces Round #786 (Div. 3) 补题记录
  • 原文地址:https://blog.csdn.net/DSelegent/article/details/126325620