美文网首页
流程控制语句

流程控制语句

作者: amanohina | 来源:发表于2020-11-26 14:47 被阅读0次

    表达式

    • 一个表达式可以产生一个值,有可能是运算、函数调用、有可能是字面量。表达式可以放在任何需要值的地方。
    • 特点:表达式会先执行出一个结果,然后再参与其他程序。

    语句

    • 语句可以理解为一个行为,循环语句和判断语句就是典型的语句。一个程序有很多个语句组成,一般情况下分号 ; 分割一个一个的语句。
    • 语句可以认为是给计算机的一个指令,执行这段代码。
    • 一般语句以分号结束,特殊的结构除外。

    流程控制语句

    • 流程控制语句:通过一些特殊结构可以让 js 代码加载时,要么可以跳过一部分不加载,或者可以循环加载一段代码。
    • 包括:条件分支语句、循环语句。

    条件分支语句

    if语句

    • if语句是最常用的条件分支语句,作用就是通过某个特定的判断条件,决定走哪条分支的代码
      -结构:
    if (condition expression) {
        statement1;
    } else {
        statement2;
    }
    
    • condition expression:条件表达式,任意的代码或者表达式,参与程序过程都会强制得到一个布尔值执行结果。表达式,js中遇到的任何表达式都会计算出一个结果然后才能继续执行程序

    • statement:结构体,js中可以使用{}包含一行到多行的语句,这些语句构成了一个结构体,结构体的语句要执行就都会执行,取决于condition expression的结果

    • if:如果

    • else:否则

    • 上述代码总结:如果条件表达式是true,执行1,否则执行2

    注意事项

    • if 语句可以实现选择的功能,两个分支可以选择一个执行,不会都执行。
    • if 语句可以不写 else 分支,表示条件成立就执行后面的结构体,如果条件不成立,直接跳出 if 语句不执行。
    • if 语句后面的机构体如果是单行语句组成,可以省略 {} 不写。不建议省略大括号,容易出现程序错误。
    • if 语句能够控制自己内部的流程,但是不论走哪个分支,结束后都要继续执行 if 语句后面的其他语句,叫做殊途同归现象。

    多分支if语句

    • 包含多个判断条件,对应多个分支。
    • 语法:if……else if……else if……else……
    • 结构:
        if (条件1) {
            满足条件1,执行的结构体
        } else if (条件2) {
            不满足条件1,满足条件2,执行的结构体
        } else if (条件3) {
            不满足条件1/2,满足条件3,执行的结构体
        } else {
            不满足前面所有条件,执行的结构体
        }
    

    注意事项

    ①多分支 if 语句中可以有多个 else if 的分支,但是 else 分支只能有一个,必须出现在最后,作为备用的选项,而且 else 也可以省略不写,表示前面条件如果都不满足,直接跳出不走任何分支。
    ②多分支 if 语句有跳楼现象:条件从上往下依次验证,如果满足了某个条件,会立即执行后面的结构体,执行完之后,不会再往后验证其他的条件了,而是从这一层直接跳楼跳出if语句,这就是跳楼现象。

    if语句嵌套

    • if语句内部嵌套了if语句
    • 如果想执行内部 if 语句的某个分支,必须满足外部 if 语句的条件,同时还要满足内部 if 语句的某个条件。
    • 优点:可以简化多分支 if 语句。
      案例:男女退休判断
     // 外层的 if 语句只判断性别
        // 内层的 if 语句只判断年龄
        if (sex === "男") {
          // 男性,年龄需要大于60岁
          if (age >= 60) {
            alert("恭喜你,可以享受人生了");
          } else {
            alert("忍忍吧,还要坚持坚持");
          }
        } else {
          // 女性,年龄需要大于55岁
          if (age >= 55) {
            alert("恭喜你,幸福人生开始了");
          } else {
            alert("太难了,还得继续坚持");
          }
        }
    

    三元表达式

    • 又名三元运算符,必须有三个操作数参与的运算
    • 操作符:
      ? :
    • 表达式:参与js程序的时候,必须计算出来表达式结果,才能参与后续的程序
    • 三元表达式具备了一些选择的效果,所以也是一种条件分支语句

    语法:

    • boolean_expression ? true_value : false_value;
    • boolean_expression:布尔表达式,表达式在参与三元运算中必须求得一个布尔类型的值,要么是 true,要么是 false,结果作为判断依据,判断到底去:前面的值还是后面的值。
    • true_value:布尔表达式的值为真时,三元表达式的结果。
    • false_value:布尔表达式的值为假时,三元表达式的结果。
    • 作用:根据布尔表达式的结果,如果为真,三元表达式结果就是真值,如果为假,三元表达式结果就是假值
        var a = 4;
        var b = a >= 5 ? 1 : 0;
        console.log(b);
    

    运行结果:0

    优点

    • 虽然if语句可以模拟三元表达式,但是三元表达式有自己的优点:
      ①二选一的情况下,三元表达式结构更加简单。
      ②三元表达式作为一个表达式参与程序时必须运算出结果才能参与,可以利用这个特点,将二选一结果赋值给一个变量。
    • 遇到给一个变量根据条件二选一赋值的情况,可以使用三元表达式。

    switch语句

    • 开关语句允许一个程序求一个表达式的值,并且尝试去匹配表达式的值到一个case标签,匹配成功,这个程序执行相关的语句
    • 语法:
    switch (表达式) {
        case 值1:
            结构体1;
            break;
        case 值2:
            结构体2;
            break;
        ……
        default: 
            结构体n;
            break;
         }
    
    
    • switch:关键字表示开始进入一个开关语句
    • 表达式:会求出一个具体的值,用于去匹配case后面的值,匹配相等的条件不只是值相等,数据类型也要相等
    • case:示例,关键字后面要有空格,书写匹配的值
    • case后面的结构体,每个case匹配成功之后要有执行的语句
    • break:打断结构体,直接跳出,模拟跳楼现象
    • default:相等于if的else,否则的情况,case都不匹配的话,就执行default后面的语句

    switch语句运行机制

    • switch 语句首先会将小括号内的表达式计算出一个结果,用结果去匹配结构体内部的 case;
    • 从上往下进行匹配,如果匹配成功,会立即执行这个 case 后面的语句,直到遇到一个 break 跳出整个 switch 语句;
    • 如果前面的 case 没有匹配成功,会跳过 case 之间的语句,去匹配下一个 case,直到匹配成功,如果都不成功就执行 default 后面的语句。

    注意事项

    • default可以不写,等于if里没有else,同理
    • break关键字,每个case后面都要写,不写的话就不会跳出结构体,会一直运行到直至遇到下一个break
    • 可以用break不写的情况制作一些特殊的案例

    条件分支语句的总结

    • 三种语句的情景
    • if:所有的判断条件都能书写
    • 三元表达式:多用于给变量赋值的二选一情况
    • switch:多用于给一个表达式去匹配多种固定值可能性的情况

    循环语句

    for循环

    • for 循环是一种前测试循环语句,在反复执行一段代码之前,都要先测试入口条件,如果条件为真,可以继续循环,如果条件为假,必须跳出循环不再执行。
    • or 循环是一种反复执行一段代码直到测试条件为假时停止。
     for(定义循环变量;变量的最大值或最小值;步长){
             循环体;
        }
    

    这种解释只能涵盖 for 循环的一部分特殊结构,不能表示所有的 for 循环实现的情况。


    for循环注意事项

    • 小括号内部必须有两个分号。
    • for 循环 {} 后面不需要加分号。
    • 如果 ② 位置语句不写,相当于没有设置入口条件,或者条件永远为真,没法限制什么时候停止循环了,出现死循环。
    • ③ 位置是循环的结构体,每次进入循环都要执行完后,才能执行语句 ④,③ 位置的语句是可以人为自定义的,甚至可以书写 if 语句。
    • for 循环嵌套 if 语句:表示既要能够执行循环,还要满足 if 语句的条件。
    • for 循环嵌套 for 循环:外层循环执行一次,内层循环作为外层 ③ 位置的结构体,必须执行完所有的内层循环,才能进入外层循环下一次的 ④。
    • 循环内的变量是全局变量,必须避免循环嵌套时起相同的变量名,内层和外层变量名必须不同,常用的变量名 i,j,k。

    do while循环

    do while 循环是一种后测试循环语句,会先执行一次结构体,执行完后才会去判断入口条件,如果条件为
    真能够继续下一次循环,如果条件为假跳出循环。

    • 语法:
     do{
                结构体;
            }while(条件表达式);
    
    
    • do:做什么。后面是每次循环的循环体。
    • while:当……时候。
    • 先执行一次循环体,然后当条件表达式为真时可以继续循环。

    注意事项

    • 如果循环中需要循环变量参与,循环变量必须定义在循环外面,否则会被重置。
    • 循环变量自加的过程需要写在 {} 循环体内部。
    • 如果将循环变量写在结构体内,i的初始值每次都会被重置,容易出现死循环。
    • 变量自加过程写在输出语句前面和后面,结果是不同的。
    • do while 循环即便条件第一次测试就为假,也会执行一次结构体。
      至少会执行一次循环体。

    while循环

    • while 循环是一种前测试循环语句,在执行循环体之前都要测试入口条件,条件为真继续执行,条件为假直接跳出循环。

    语法

        while(条件表达式){
             循环体;
        }
    

    当条件表达式为真时,执行循环体,如果为假,跳出循环。

    注意事项

    • 如果需要循环变量参与,必须定义在循环外部,避免被重置。
    • 循环变量自加的过程写在循环体内部。

    总结

    • 遇到必须要执行一次循环体的循环,使用do while
    • 先测试入口条件的循环,选择for或者while

    break语句

    • break语句可以立即停止当前的for、do while、while循环
    • 根据一些条件设置break位置,直到循环能够执行到break语句立即停止执行,跳出循环

    注意事项

    • break 如果没有特殊指示,只能停止自己所在的那一层循环,并不能终止外部循环。
    • 如果想停止外层循环,可以给外层循环添加一个标签名 label,在内层循环的 break 关键字后面空格加一个 label 名。


    continue语句

    • 遇到continue表示当前的一次循环数据不是想得到的,立即停止当前循环进行下一次循环

    注意事项

    • 要根据特殊条件设置 continue 的位置。
    • continue 如果没有特殊指示只能进入自己的下一次循环,不能立即停止外层循环的这一次进入下一次。
    • 控制外层循环的方式与 break 一样,都是添加外层的标签名。


    总结

    break和continue这两个语句的出现可以帮助我们大量的优化代码,减少计算次数

    穷举思想

    • 实际案例中,可能需要找到一些有规律的数据,但是计算机没办法自动智能筛选所要的数据,只能程序员自己书写一段代码,让计算机根据代码去进行筛选。
    • 穷举思想:是一种解决问题的方法,将所有的需要数据所在的范围内所有的数据都一一列举出来,再根据规律的条件对所有这些数据进行筛选,这种方式就是穷举法。

    制作方法:

    • for循环:外层使用for循环进行一一列举
    • if语句:内层用if判断,筛选数据,有满足的就操作数据,不满足的跳过看下一次循环数据
      案例:
    // 让用户随意输入一个正数,给用户输出这个数字所有的约数
        var n = parseInt(prompt("请输入一个正整数"));
        // 穷举思想,外层一一列举可能性,内层判断
        for (var i = 1 ; i <= n ; i++) {
          // 内层判断 i 是否是 n 的约数
          if (n % i == 0) {
            console.log(i + "是" + n + "的一个约数");
          }
        }
    

    累加器

    • 有时候需要的不是每个数据是什么,需要得到所有数据的加和,必须想办法将所有的数据的和存起来,就用到了累加器。
    • 累加器本质就是变量。
    • 实现累加的效果,就是利用循环,每次循环就将新的数据加到原始的变量中去,赋值过程是一个加等于赋值。
      案例:
    //定义累加器
    var sum = 0;
    for(var i = 1 ; i <= 10 ; i ++){
        sum+=i;
    }
    console.log(sum);
    

    注意事项

    • 累加器要定义在循环的外面,定义在内部的话会被重置,不能实现累加功能
    • 初值必须设置,而且应该设置为0,不影响累加的效果
    • 用最终的累加效果的时候,必须在for循环结束的外面,写在内部,循环还没有结束

    累乘器

    • 与累加器几乎一致
    //定义累乘器
    var mul= 0;
    for(var i = 1 ; i <= 10 ; i ++){
        mul*=i;
    }
    console.log(mul);
    

    注意事项

    • 累乘器必须定义在循环外部前面。
    • 累乘器的初始值必须是 1,1 乘以任何数都等于本身。
    • 累乘器最终结果必须在 for 循环结束后使用。

    实际案例:水仙花数

    • 水仙花数:个十百位的三次方相加等于本身的数
      思想:使用循环进行穷举法列举出所有的三位数,分别计算出个十百位的数字,然后定义一个变量把相加得到的值赋值给它,再进行判断
    // 穷举思想,列举所有的三位数
        for (var i = 100 ; i <= 999 ; i++) {
          // i 的三个数位的三次方的和,等于 i 自己
          // 找到个位、十位、百位的数字
          var ge = i % 10,
              shi = parseInt(i / 10) % 10,
              bai = parseInt(i / 100);
          // 计算三个数位的三次方的和
          var sum = ge * ge * ge + shi * shi * shi + bai * bai * bai ;
          // 判断 sum 是否等于 i 自己,如果是,就是水仙花数,需要输出
          if (sum == i) {
            console.log(i);
          }
        }
    
    答案

    相关文章

      网友评论

          本文标题:流程控制语句

          本文链接:https://www.haomeiwen.com/subject/tzuiiktx.html