10-JavaScript基础-流程控制-Switch

Switch基本概念

  • Switch和if一样都属于选择结构, 都会对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。

Switch基本格式

switch(条件表达式){
  case 表达式:
      语句1;
      break;
  case 表达式:
      语句2; 
      break;
  case 表达式n:
      语句n;
      break;
  default:
      语句n+1;
      break;
}
  • 其语义是:

    • 计算条件表达式的值。 并逐个与case后面表达式的结果值比较
    • 条件表达式的值与某个表达式的值全等时, 执行其后的语句,并且不会再与其它case进行比较
    • 条件表达式的值与所有case后的表达式均不相同时,则执行default后的语句。
  • 示例

    var num = 2;
    switch(num){
        case 1:
            console.log("壹");
            break;
        case 2:
            console.log("贰"); // 输出贰
            break;
        case 3:
            console.log("叁");
            break;
        default:
            console.log("非法数字");
            break;
    }

Switch注意事项

  • case全等于问题

    • JavaScript中case判断是否相等时是全等于(===),而不是等于(==),也就是说既会判断类型是否相等又会判断值是否相等

      var str = "123";
      switch (str){
          case 123:
              console.log("123数字");
              break;
          case "123":
              console.log("123字符串"); // 输出123字符串
              break;
          default:
              console.log("default");
              break;
      }
      
    • case后可以是常量也可以是变量

      var num = 120;
      switch (120){
          case num: // 这里可以是变量
              console.log("120"); // 输出120
              break;
          case 110: // 这里可以是常量
              console.log("110");
              break;
          default:
              console.log("default");
              break;
      }
      
  • 表达式判断问题

    • 判断时会先计算表达式的值,再判断
    switch (120 + 3){ // 计算后为123
        case 120:
            console.log("120");
            break;
        case 3:
            console.log("3");
            break;
        case 3 + 120: // 计算后为123
            console.log("3 + 120"); // 输出3 + 120
            break;
        default:
            console.log("default");
            break;
    }
    
  • case的穿透问题

    • switch里面的case只要匹配一次其它的都会失效,包括default.
    • 在case语句最后增加 break 语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果
      var num = 2;
      switch(num){
          case 1:
              console.log("壹");
          case 2:
              console.log("贰"); // 输出贰
          case 3:
              console.log("叁");// 输出叁
          default:
              console.log("非法数字");  // 输出非法数字
      }
      
  • default的位置问题

    • default可以省略
      switch(2){
          case 1:
              console.log("壹");
              break;
          case 2:
              console.log("贰");
              break;
      }
      
    • default语句可以写在switch语句中的任意位置
      switch(3){
          case 1:
              console.log("壹");
              break;
          default: // 无论写在哪, 都只会在所有case不匹配才执行
              console.log("非法数字~~");
              break;
          case 2:
              console.log("贰");
              break;
      }
      

if语句和switch语句转换

 要求用户输入一个分数,根据输入的分数输出对应的等级
   A 90~100
   B 80~89
   C 70~79
   D 60~69
   E 0~59
  • 利用if实现
    //    1.定义变量保存用户输入的分数
    var score;
    //    2.提接收用户输入的学生的分数
    score = +(window.prompt("请输入一个0~100的分数\n"));
    //    3.判断用户输入的分数输出对应的等级
    if (score >= 90 && score <= 100) {
        alert("A");
    }else if (score >= 80 && score <= 89) {
        alert("B");
    }else if (score >= 70 && score <= 79) {
        alert("C");
    }else if (score >= 60 && score <= 69) {
        alert("D");
    }else if (score >= 0 && score <= 59) {
        alert("E");
    }else{
        alert("少喝点三鹿");
    }
  • 利用switch实现
    //    1.定义变量保存用户输入的分数
    var score;
    //    2.提接收用户输入的学生的分数
    score = +(window.prompt("请输入一个0~100的分数\n"));
    //    3.判断用户输入的分数输出对应的等级
    // 100/10 = 10, 99/10 = 9.9
    console.log(score / 10);
    console.log(parseInt(score / 10));
    switch (score/10) {
        case 10: // 利用case的穿透简化代码
        case 9:
            alert("A");
            break;
        case 8:
            alert("B");
            break;
        case 7:
            alert("D");
            break;
        case 6:
            alert("C");
            break;
        default:
            alert("E");
            break;
    }

if语句和switch语句选择

  • 分支比较多无法穷尽时最好用 if, 其它情况可以按照个人习惯

  • 如果数据量不是很大, 并且数据是固定的可以用Switch

  • 理论上Switch的效率比if高

  • 示例Switch弊端

    • 判断用户输入的数是否大于100
    • if实现
      //    1.定义变量保存用户输入的分数
      var score;
      //    2.提接收用户输入的学生的分数
      score = +(window.prompt("请输入一个0~100的分数\n"));
      //    3.判断用户输入的数是否大于100
      if (a > 100) {
          console.log("大于");;
      }
      
    • switch实现
      // 挺(T)萌(M)的(D)搞不定啊
      switch (101) {
          case 101:
          case 102:
          case 103:
          case 104:
          case 105:
              console.log("大于\n");
              break;
          default:
              console.log("小于\n");
              break;
      }
      

Switch练习

  • 从键盘输入一个月份,输出对应季节 12~2 冬季 3~5 春季 6~ 8 夏季 9~11 秋季(用switch)
    //    1.定义变量保存用户输入的数据
    var month;
    //    2.利用window.prompt()接收用户输入数据
    month = +(window.prompt("请输入一个1-12的月份"));
    //    3.数据安全校验
    if(isNaN(month)){
        alert("火星SB?");
    }else{
//    4.根据输入的数据判断输出对应的月份即可
        switch (month){
            case 1:
            case 2:
            case 12:
                alert("冬季");
                break;
            case 3:
            case 4:
            case 5:
                alert("春季");
                break;
            case 6:
            case 7:
            case 8:
                alert("夏季");
                break;
            case 9:
            case 10:
            case 11:
                alert("秋季");
                break;
            default:
                alert("你是SB么?");
                break;
        }
    }
  • 使用Switch实现简单的计算器
    // 1.定义变量保存用户输入
    var num1,num2,op,result;
    // 2.接收用户输入
    num1 = +(window.prompt("请输入第一个数字"));
    op = window.prompt("请输入运算符: + - * /");
    num2 = +(window.prompt("请输入第二个数字:"));
    // 3.根据用户输入计算结果
    switch (op) {
        case "+":
            result = num1+num2;
            break;
        case "-":
            result = num1-num2;
            break;
        case "*":
            result = num1*num2;
            break;
        case "/":
            result = num1/num2;
            break;
        default:
            alert("更多功能请使用付费版本");
            break;
    }
    // 4.输出结果
    alert("计算结果:" + result);

学习交流方式:
1.微信公众账号搜索: 李南江(配套视频,代码,资料各种福利获取)
2.加入前端学习交流群:
302942894 / 289964053 / 11550038

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

推荐阅读更多精彩内容

  • 前端07班 王语句JavaScript程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是...
    ea203453e188阅读 877评论 0 4
  • 语句 JavaScript程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。 ...
    米塔塔阅读 447评论 1 10
  • FreeCodeCamp - Basic JavaScript 写在前面: 我曾经在进谷前刷过这一套题,不过当时只...
    付林恒阅读 16,404评论 5 28
  • 我的心情此刻就象她,她是我的写照,累得不想动了。其实今天收获很大,早上去见了一个大客户,出来约好同事没回公司,然后...
    岚妈成长历程阅读 263评论 0 0
  • 花间嬉戏会被蜜蜂蛰伤 流浪天涯会使我瞬间衰老 我已经不是孩子了 我知道花被迫生长了尖刺 我知道一切单纯终将摧毁 如...
    糖点什么阅读 195评论 0 0