美文网首页程序员Web 前端开发 JavaScript
05-JavaScript基础-流程控制语句

05-JavaScript基础-流程控制语句

作者: 撩课_叶建华 | 来源:发表于2018-10-24 12:03 被阅读506次

    文章配套视频

    1.什么是代码块

    简介

    程序是由一条一条语句构成的, 
    语句是按照自上向下的顺序一条一条执行的, 
    在JS中可以使用{}来为语句进行分组
    同一个{}中的语句我们称为是一组语句,
    它们要么都执行,要么都不执行。
    

    使用
    JS中的代码块,
    只具有分组的的作用,
    没有其他的用途,
    代码块里面的内容,
    在外部是完全可见的。

    列如:

    javascript
          {
            var name = '撩课学院';  
            console.log("itlike.com");
            document.write("喜欢IT, 就上撩课!");
          }
    javascript
     console.log("name = " + name);
    

    2. 流程控制语句

    基本概念
    默认情况下,
    程序的运行流程是这样的:
    运行程序后,
    系统会按书写从上至下顺序
    执行程序中的每一行代码,
    但是这并不能满足
    我们所有的开发需求

    如下图:


    实际开发中,
    我们需要根据
    不同的条件执行
    不同的代码或者
    重复执行某一段代码

    为了方便我们控制程序的运行流程,
    JavaScript提供3种流程结构,
    不同的流程结构可以实现不同的运行流程。
    这3种流程结构分别是
    顺序、选择、循环:
    
    三种基本控制结构构造.
    顺序结构
     默认的流程结构。按照书写顺序从上至下执行每一条语句
    选择结构
    对给定的条件进行判断,再根据判断结果来决定执行哪一段代码
    循环结构
    在给定条件成立的情况下,反复执行某一段代码
    

    if语句
    如果条件表达式为真,执行语句块1,否则不执行
    if(条件表达式) { 语句块1 } 后续语句;

      if(age > 18)
      {
          console.log("可以上网");
      }
      ````
    

    如果条件表达式为真,则执行语句块1,否则执行语句块2

      if(条件表达式)
      {
          语句块1
      }else{
          语句块2
      }
    
      if(age > 18)
      {
          console.log("可以上网");
      }else{
          console.log("你妈妈喊你吃饭");
      }
    

    特点

    if和else后面的代码块({})只有一个会被执行 
    如果条件表达式1为真,则执行语句块1,
    否则判断条件表达式2,
    如果为真执行语句块2,
    否则再判断条件表达式3,
    如果真执行语句块3, 
    当表达式1、2、3都不满足,会执行最后一个else语句
    
     代码如下:
          if(条件表达式1)
          {
              语句块1
          }else if(条件表达式2){
              语句块2
          }else if(条件表达式3){
              语句块3
          }else{
              语句块4
    
    
    
          if(age>40)
          {
              console.log("老年人");
          }else if(age>25){
              console.log("中年人");
          }else if(age>18){
              console.log("成年人");
          }else{
              console.log("未成年");
          }
    
    
     特点
         这么多大括号中只有一个大括号中的内容会被执行
         当执行到后面条件的时候证明前面的条件不满足
         else if可以只有一个, 也可以有多个, 但是都必须添加在if和else之间
    
     注意事项
       如果只有一条语句时if后面的大括号可以省略
          if(age > 18)
              console.log("成年人");
    
       注意:受到if管制的只有紧跟其后的那条语句
       开发中尽量不要省略大括号
    
            if(false)
                console.log("语句1");
            console.log("语句2"); // 语句2会被输出
    
      分号“;”也是一条语句, 空语句
          if(4 > 6);
          {
              console.log("4 > 6");
          }
          // 输出结果: 4 > 6, if管制的紧跟其后的那个分号
          // {}在JS中仅仅代表告诉系统里面的语句是一个整体, 没有别的用途,不会影响代码的执行
    
       if else是一个整体, else匹配if的时候匹配离它最近的一个if
    
             if(0)
                  if(1)
                      console.log("A");
                  else 
                      console.log("B");
              else 
                  if (1)
                      console.log("C"); 
                  else
                      console.log("D");
    
      对于非Boolean类型的值,会先转换为Boolean类型后再判断
    
           if (0) {
                  console.log("itlike\n"); // 不会被执行
              }
          ```
    
       判断变量与常量问题
    
       但凡遇到比较一个变量等于或者不等于某一个常量的时候,把常量写在前面
    
            // if(a = 0)  // 错误写法, 但不会报错
                if (0 == a) {
                    console.log("a的值是0\n");
                }else{
                   console.log("a的值不是0\n");
                }
    
             /*
                本来是先判断变量a存储的值是否等于0,
                但是如果不小心写成a=0,代表把0存储到a中.
                为了避免这种问题判断是否相等时把常量写前面,
                因为等号左边只能是变量, 所以如果少写一个等号会报错
            */
    
    
       if语句可以嵌套使用
    
           var num = 20;
              if (num >= 10)
              {
                  if(num <= 30)
                  {
                      console.log("一个10~30之间的数")
                  }
              }
    
      习题训练
    
      从键盘输入一个整数,判断其是否是偶数,如果是偶数就输出YES,否则输出NO
    
        //    1.定义一个变量保存用户输入的整数
            var temp;
        //    2.利用window.prompt()接收用户输入数据
        //     window.prompt返回给我们的是一个字符串, 需要转换为Number
            temp = +(window.prompt("请输入一个整数"));
        //    3.对用户输入的数据进行安全校验
            if(isNaN(temp)){
                alert("你是SB吗?");
            }else{
        //    3.判断用户输入的数据是否是偶数, 然后根据判断结果输出YES/NO
                /*
                if(temp % 2 == 0){
                    alert("YES");
                }else{
                    alert("NO");
                }
                */
                (temp % 2 == 0) ? alert("YES") :  alert("NO");
            }
      接收用户输入的1~7的整数,根据用户输入的整数,输出对应的星期几?
    
        //    1.定义变量保存用户输入的数据
            var day;
        //    2.利用window.prompt()接收用户输入数据
            day = +(window.prompt("输入的1~7的整数"));
        //    3.判断当前是星期几
            if(day == 1){
                console.log("星期一");
            }else if(day == 2){
                console.log("星期二");
            }else if(day == 3){
                console.log("星三");
            }else if(day == 4){
                console.log("星期四");
            }else if(day == 5){
                console.log("星期五");
            }else if(day == 6){
                console.log("星期六");
            }else if(day == 7){
                console.log("星期日");
            }else{
                console.log("滚犊子");
            }.
    
      接收用户输入的一个整数month代表月份,根据月份输出对应的季节?
      第一种:
    
          //    1.定义变量保存用户输入的数据
              var month;
          //    2.利用window.prompt()接收用户输入数据
              month = +(window.prompt("请输入一个1-12的月份"));
          //    3.数据安全校验
              if(isNaN(month)){
                  alert("火星SB?");
              }else{
          //    4.根据输入的数据判断输出对应的月份即可
                  if(month >= 3 && month <= 5){
                      alert("春季 ");
                  }else if(month >=6 && month <= 8){
                      alert("夏季");
                  }else if(month >=9 && month <= 11){
                      alert("秋季");
                  }else if(month == 12 || month == 1 || month == 2){
                      alert("冬季");
                  }else{
                      alert("火星季节");
                  }
            }
       第二种:
          //    1.定义变量保存用户输入的数据
              var month;
          //    2.利用window.prompt()接收用户输入数据
              month = +(window.prompt("请输入一个1-12的月份"));
          //    3.数据安全校验
              if(isNaN(month)){
                  alert("火星SB?");
              }else{
          //    4.根据输入的数据判断输出对应的月份即可
                  if(month < 1 || month > 12){
                      alert("火星季节");
                  }else if(month >= 3 && month <= 5){
                      alert("春季 ");
                  }else if(month >=6 && month <= 8){
                      alert("夏季");
                  }else if(month >=9 && month <= 11){
                      alert("秋季");
                  }else{
                      alert("冬季");
                  }
              }
    
      第三种:
          //    1.定义变量保存用户输入的数据
              var month;
          //    2.利用window.prompt()接收用户输入数据
              month = +(window.prompt("请输入一个1-12的月份"));
          //    3.数据安全校验
              if(isNaN(month)){
                  alert("火星SB?");
              }else{
          //    4.根据输入的数据判断输出对应的月份即可
                  if(month == 12 || month == 1 || month == 2){
                      alert("冬季");  // 没有进入, 剩下的必然是3-11
                  }else if(month >=9){ 
                      alert("秋季"); // 没有进入, 剩下的必然 3-8
                  }else if(month >=6){ 
                      alert("夏季"); // 没有进入, 剩下的必然 3-5
                  }else if(month >= 3){
                      alert("春季 ");
                  }else{ // 12 1 2
                      alert("火星季节");
                  }
              }
      从键盘输入2个整数,判断大小后输出较大的那个数?
      
        //    1.定义变量保存三个整数
            var a, b;
        //    2.利用window.prompt接收用户输入的数据
            a =  +(window.prompt("请输入内容")); 
            b =  +(window.prompt("请输入内容")); 
        //    3.利用if进行两两比较
            if(a > b){
                console.log(a);
            }else{
                console.log(b);
            }
            /*
            三元运算符好处:可以简化if else代码
            弊端                  :因为是一个运算符所以运算完必要要有一个结果。  
            简单用三元 复杂用if(阅读性好)
            */
            console.log(a > b? a: b);
      从键盘输入3个整数,排序后输出?
      常规写法
    
          //    1.定义变量保存三个整数
              var a, b, c;
          //    2.利用window.prompt接收用户输入的数据
              a =  +(window.prompt("请输入内容"));
              b =  +(window.prompt("请输入内容"));
              c =  +(window.prompt("请输入内容"));
              //     方式1 写出所有方式
              if (a >= b && b >=c) {
                  console.log(a, b, c);
              }else if (a >= c && c >= b) {
                  console.log(a, c, b);
              }else if (b >= a && a >= c) {
                  console.log(b, a, c);
              }else if (b >= c && c >= a) {
                  console.log(b, c, a);
              }else if (c >= a && a >= b) {
                  console.log(c, a, b);
              }else if (c >= b && b >= a) {
                  console.log(c, b, a);
              }
    
          选择排序
            //    1.定义变量保存三个整数
                var a, b, c;
            //    2.利用window.prompt接收用户输入的数据
                a =  +(window.prompt("请输入内容"));
                b =  +(window.prompt("请输入内容"));
                c =  +(window.prompt("请输入内容"));
            //     方式2 选择排序
                var temp;
                if (a > b) {
                    temp = a;
                    a = b;
                    b = temp;
                }
                if (a > c) {
                    temp = a;
                    a = c;
                    c = temp;
                }
                if ( b > c) {
                    temp = b;
                    b = c;
                    c = temp;
                }
                console.log(a, b, c);
      冒泡排序
    
              //    1.定义变量保存三个整数
                  var a, b, c;
              //    2.利用window.prompt接收用户输入的数据
                  a =  +(window.prompt("请输入内容"));
                  b =  +(window.prompt("请输入内容"));
                  c =  +(window.prompt("请输入内容"));
              //     方式3 冒泡排序
                  var temp;
                  if (a > b) {
                      temp = a;
                      a = b;
                      b = temp;
                  }
                  if (b > c) {
                      temp = b;
                      b = c;
                      c = temp;
                  }
                  if ( a > b) {
                      temp = a;
                      a = b;
                      b = temp;
                  }
                  console.log(a, b, c);
        石头剪子布实现?
    
        // 定义 0.剪刀 1.石头 2.布
            // 1、定义变量 玩家和电脑
            var player,computer = 0;
            
            // 2、让电脑先出拳
            var temp = Math.random() * 3;
            // 3、用户出拳
            var player = window.prompt("请出拳:0.剪刀 1.石头 2.布");
            // 数据合法性的校验
            if (player<0||player>2) {
                window.prompt("请重新出拳:0.剪刀 1.石头 2.布");
            }else{
                // 4、判断比较 //先判断用户赢的情况
                if((player==0&&computer==2)||
                        (player==1&&computer==0)||
                        (player==2&&computer==1)){
                    window.alert("我靠,你赢了!\n");
        
                }else if((computer==0&&player==2)||
                        (computer==1&&player==0)||
                        (computer==2&&player==1)){
                    window.alert("很遗憾,你输了!\n");
        
                }else{
                    window.alert("平局\n");
                }
            }
    
    
    3. 循环
    
    循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段, 直到条件不成立为止。
    
    给定的条件称为循环条件,反复执行的程序段称为循环体
    循环结构简单来说就是:一次又一次的执行相同的代码块
    

    现实生活中的循坏


    JavaScript中的循坏

      while语句
      do-while语句
      for语句
      while循环
    

    格式

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

    执行流程

    判断条件表达式是否为真, 如果为真执行后面大括号中的内容
    
    执行完毕再次判断条件表达式是否还为真,如果为真执行后面大括号中的内容
    
     重复上述过程,直到条件不成立就结束while循环
    
      var num = 0;
      while (num < 10){
        console.log(num); 
        num++;
      }
    

    构成循环结构的几个条件

     循环控制条件(条件表达式)
     循环退出的主要依据,来控制循环到底什么时候退出
     循环体(while后面的大括号{})
     循环的过程中重复执行的代码段
     循环结束语句(递增,递减,break等)
     能够让循环条件为假的依据,否则退出循环
    

    while循环特点

    如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行
      var num = 10;
      while (num < 10){
          alert(num); // 什么都不弹
          num++;
      }
    

    while循坏注意点

      死循环
    
      条件表达式永远为真, 循坏永远无法结束,我们称之为死循环
    
         while (true){
                alert("itlike.com");
            }
    

    任何值都有真假性

     对于非Boolean类型的值, 会先转换为Boolean类型再判断
    
     while (1){ // 先把1转换为Boolean, 然后再判断真假
                alert("itlike.com");
            }
     
     while 后如果只有一条语句它可以省略大括号
    
     如果省略大括号, while只会管制紧跟其后的那条语句
    
        while (0)
           alert("会执行我么?"); // 不会执行
        alert("itlike.com");
    

    分号问题

       分号(;)也是一条语句, 代表空语句
    
         while (0);
          {
              alert("123"); // 会被执行, 因为while管制的是分号(;)
          }
    

    最简单的死循环
    开发中慎用死循环, 会导致程序阻塞

         while (1);
    

    while循坏练习

        提示用户输入一个正整数n, 计算1 + 2 + 3 + ...n的和
    
          //    1.定义变量保存上一次的和
              var sum = 0;
              //    2.定义变量保存递增的数
              var number = 1;
              while (number <= 5) {
                  console.log("sum = "+ sum +" + number = "+ number);
                  sum = sum + number;
                  number++;
              }
              console.log("sum = " + sum);
    
        获取1~100之间 7的倍数的个数并打印,并统计个数
    
          var count = 1;
              var num = 0;
              while (count <= 100) {
          
                  if (count % 7 == 0) {
          
                      console.log("count = " + count);
                      num++;//计数器
                  }
                  count++;
              }
          
              console.log("number = "+ num);
    
    

    break关键字


    作用
    跳出Switch语句
          var num = 1;
          switch(num){
              case 1:
                  console.log("壹");// 输出壹
                  break; // 跳出switch语句, 后面代码不会执行
              case 2:
                  console.log("贰"); 
                  break;
              default:
                  console.log("非法数字");
                  break;
          }
    

    跳出循环语句

          var num = 0;
          while(true){ 
              console.log(num);
              if(3 == num){
                  break; // 当num等于3时跳出循环
              }
              num++
          }
    

    注意点

          break关键字只能用于循环语句和switch语句, 在其它地方没有意义
    
           
            break;  // 浏览器会报错
            alert("我会输出么?");
    
            if(true){
                break; // 浏览器会报错
                alert("我会输出么?");
            }
            ```
    
          在多层循环中,一个break语句只向外跳一层
    
           
            while (1){
                while (2){
                    console.log("我是while2"); // 会被输出多次
                    break; // 跳出while2,但是不会跳出while1
                }
                console.log("我是while1");
            }
        
    
          break后面的语句永远不会被执行
    
           
            while (1){
                break;
                alert("会弹出来么?"); // 不会弹出
            }
    

    continue关键字

      作用
    
      跳过当前循环体中剩余的语句而继续下一次
    
          var num = 0;
            while (num < 10){
                num++;
                if(num % 2 == 0){
                    continue;
                }
                console.log(num); // 1, 3, 5, 7, 9
            }
    
    
    注意点
    
    只能用于循环结构, 在其它地方没有意义
    
    continue后面的语句永远不会被执行
    
          while (1){
              continue;
              alert("会弹出来么?"); // 不会弹出
          }
    

    do-while循环

    格式
    
       do {
           语句1;
           语句2;
           ....
       } while ( 条件 );
    
    
        执行流程
    
        首先会执行一次循环体中的语句
        接着判断while中的条件表达式是否为真,如果为真再次执行循环体中的语句
        重复上述过程,直到条件不成立就结束while循环
    
      特点
    
        不管while中的条件是否成立,循环体中的语句至少会被执行一遍
    
      应用场景
    
        口令校验
    

    for循环

    JavaScript中的for语句使用最为灵活,
    不仅可以用于循环次数已经确定的情况,
    而且可以用于循环次数不确定而只给出循环结束条件的情况,
    它完全可以代替while语句。

    格式
    
      
      for(①初始化表达式;②循环条件表达式;④循环后操作表达式)
      {
          ③执行语句;
      }
    

    for循环执行流程

       for循环开始时,会先执行初始化表达式,而且在整个循环过程中只执行一次初始化表达式
    
        接着判断循环条件表达式是否为真,如果条件为真,就会执行循环体中的语句
    
       循环体执行完毕后,接下来会执行循环后的操作表达式
    
        执行完循环后操作表达式, 然后再次判断循环条件表达式是否为真,如果条件为真,就会执行循环体中的语句
    
        重复上述过程,直到条件不成立就结束for循环
    
            for(var i = 0; i < 10; i++){
                alert(i); // 输出0-9
            }
           
            for循环和while循环如何选择?
    
           一般情况下while和for可以互换, 但是如果循环执行完毕之后就不需要使用用于控制循环的增量, 那么用for更好
    
         注意点
    
            for循环中初始化表达式,循环条件表达式,
            循环后操作表达式都可以不写
            循环条件表达式默认为真
            for(; ;) 语句相当于while(1), 都是死循环
            其它注意点和while一样
    
          循环嵌套练习
    
            打印好友列表
    
              好友列表1
              ​          好友1
              ​          好友2
              ​          好友3
                 好友列表2
              ​          好友1
              ​          好友2
              ​          好友3
    
               
              for (var i = 1; i <= 2; i++) {
                      console.log("好友列表"+ i);
                      for (var j = 1; j <= 3; j++) {
                          console.log("    好友"+ j);
                      }
                  }
            
    
           for循环嵌套实现:打印99乘法表
    
            
            <style>
            
                    span{
                        display: inline-block;
                        border: 1px solid #000;
                        padding: 10px;
                    }
            </style>
            <script>
                /*
                  1.观察发现有很多行很多列--》循环嵌套
                  2.尖尖朝上,让内循环条件表达式随着外循环i改变
                  3.输出的结果等于 内循环的变量 * 外循环的变量
                */
                for (var i = 1; i <= 9; i++) {
                    for (var j = 1; j <= i; j++) {
                        document.write("<span>"+j+"*"+i+"="+i*j+"</span>");
                    }
                    window.document.write("<br/>");
                }
            </script>
          
    

    相关文章

      网友评论

        本文标题:05-JavaScript基础-流程控制语句

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