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

文章配套视频

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>
      
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,132评论 0 13
  • 美图 1: 2: 3: 4: 5:
    魅月隐世阅读 225评论 0 1
  • 我,一个名不见经传的小人物,初到简书,什么都不懂,没有良好的文笔,没有优秀的语言再现能力,每天隔着手机屏幕,滑动...
    一枚小草阅读 196评论 0 1