首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js中case switch

switch语句是JavaScript中的一个控制流语句,它允许变量或表达式的值与一系列的值进行比较,并执行相应的语句块。其基本结构如下:

代码语言:txt
复制
switch(expression) {
  case value1:
    // 当expression的值等于value1时执行的代码块
    break;
  case value2:
    // 当expression的值等于value2时执行的代码块
    break;
  // 可以有任意数量的case语句
  default:
    // 如果没有匹配的case,则执行default代码块
}

基础概念

  • expression:需要评估的表达式,其结果将与各个case标签的值进行比较。
  • case:每个case标签后跟一个值和一个冒号,表示当expression的结果与该值匹配时要执行的代码块。
  • break:用于跳出switch语句,防止继续执行下一个case的代码。
  • default:可选的default标签,当没有case匹配时执行。

优势

  1. 可读性:相比于多个if...else if...else语句,switch语句通常更容易阅读和维护。
  2. 性能:在某些情况下,switch语句的执行效率可能比一系列的条件判断要高。

类型

  • 基本类型switch语句的表达式和case标签可以是字符串或数字。
  • 严格比较:JavaScript中的switch使用严格比较(===),这意味着值和类型都必须匹配。

应用场景

  • 多条件判断:当需要根据某个变量的不同值执行不同的代码块时。
  • 状态机:在实现状态机或根据不同状态执行不同操作时。

示例代码

代码语言:txt
复制
let day = new Date().getDay();

switch(day) {
  case 0:
    console.log('Sunday');
    break;
  case 1:
    console.log('Monday');
    break;
  case 2:
    console.log('Tuesday');
    break;
  case 3:
    console.log('Wednesday');
    break;
  case 4:
    console.log('Thursday');
    break;
  case 5:
    console.log('Friday');
    break;
  case 6:
    console.log('Saturday');
    break;
  default:
    console.log('Unknown day');
}

可能遇到的问题及解决方法

问题1:忘记使用break导致穿透

原因:如果在case块中没有使用break,程序将继续执行下一个case块的代码。

解决方法:确保每个case块末尾都有break语句。

代码语言:txt
复制
switch(value) {
  case 1:
    console.log('One');
    break; // 必须添加break
  case 2:
    console.log('Two');
    break;
  default:
    console.log('Default');
}

问题2:default块未处理所有情况

原因:如果没有为switch语句提供default块,且没有任何case匹配,那么将不会有任何代码执行。

解决方法:添加一个default块来处理未匹配到的情况。

代码语言:txt
复制
switch(value) {
  case 1:
    console.log('One');
    break;
  case 2:
    console.log('Two');
    break;
  default:
    console.log('Value not recognized');
}

通过理解这些基础概念和常见问题,你可以更有效地使用switch语句来编写清晰和高效的JavaScript代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • java switch case 语句

    switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。...语法: switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句...default : //可选 //语句 } switch case 语句有如下规则: switch 语句中的变量类型可以是: byte、short、int 或者 char。...从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。 switch 语句可以拥有多个 case 语句。...当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。 当遇到 break 语句时,switch 语句终止。

    1.4K20

    用表驱动代替switch-case

    不知道从什么时候开始,switch-case语句成了代码坏味道的代名词,写代码的时候小心翼翼地避开它,看到别人代码中的switch-case就皱眉头,想想其实大可不必这样,switch-case语句并不是代码坏味道的根源...,坏味道来自糟糕的代码(结构)设计,比如过多的switch-case分支,或者多重switch-case嵌套等等,这些都将导致代码可读性下降,如果再加上代码风格较差,代码不对齐,那么坏味道就相当地大了。...简短的switch-case还是继续用吧,但是对于分支太多的长switch-case最好能想办法化解开,那么什么算长什么算短呢?...化解长switch-case的方法有很多种,用函数封装或者宏取代case块是治标不治本的方法,使用表驱动通常是治疗这种顽症的有效方法,本文将介绍如何用表驱动方法化解长switch-case。...前面例子中的switch-case语句中各个case分支参数比较简单整齐,也就是各个case分支都是用相同的参数para_in和para_out,如果各个分支使用的参数不整齐怎么办?

    70550

    有了 elseif 为什么还要 switch case

    引出 你有没有想过既然有了if elseif, 为什么还要设计一个switch case的语法出来呢?...以下几种switch case均可以写成if else的形式(java 代码): // 形式一 switch(a){ case 1: break; case 2: break;...switch case仅支持数字和字符串相等的判断, 甚至在 C 语言中只支持数字相等(其实其他语言也只支持数字, 随便写个 java 反编译一下就会发现, 它将一个switch case转成了两个,...一个 switch case编译后的执行流程大致如下: 将每一个 case编译后代码的首地址保存到一个数组中. 根据传入的值进行判断, 若数据元素不存在, 直接跳到 default....别说, 我试了几种比较流行的语言, 发现Python就不支持, 哈哈, 用了这么久Python还是突然发现它不支持switch case, 由此可见, switch case我用的比较少.

    87620

    2018-11-08 杀死If Else switch case(策略模式+工厂模式+map)套餐 Kill 项目中的switch case

    (策略模式+工厂模式+map)套餐 Kill 项目中的switch case 接手新任务:接入第三家存证机构,看之前的代码使用了swith case判断使用哪家存证机构,每家存证机构的实现逻辑不一样...代码的坏味道:多层swich case。...= new Scanner(System.in); //选择的水果种类 String fruitType = scanner.nextLine(); switch...但是使用策略模式时,我们需要知道具体的实现类,具体的实现类需要对外暴露 使用工厂模式 将类型判断放到工厂类中 工厂模式:在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象...使用工厂模式具有良好的封装性,这下妈妈再也不用关系创建类的过程,甚至连创建的实际类的都无需关心,实现了解耦,实际类的修改变化都不会影响上层业务 但是工厂类中还是有很多if的,革命尚未成功,仍需要进行优化

    1.6K30

    一个switch case引起的线上bug

    当时第一反应是不可能 2、通过QA同学提供的test case,在测试环境通过curl发送请求,发现果然广告返回值跟预期不符。 3、通过git log对比,发现近期只有一个switch语句有修改。...此处列下switch case的三个规则:switch...case的三个规则: 既无成功匹配,又无default子句,那么swtich语句块什么也不做; 无成功匹配,但有default,那么swtich...");     scanf( "%d",&iChoice);     switch (iChoice)     {     case 1:         printf("case 1 !...因为在开关主体中没有出现break语句。...\n" );     }     printf("Value of i = %d",i);     return 0; } 输出: 原因: switch 中的参数必须可以转换成一个整数 将default

    746140

    为什么switch里的case没有break不行

    javac编译和javap查看: 「tableswitch」和「lookupswitch」都用于switch条件跳转,前者用于case值连续,例如上面代码中的0、1、2;后者用于case值不连续。...从字节码可以看出:switch中的case条件和对应代码块是分开的。...再写代码样例,这次在代码中给每个case都加上break。...如果case 0匹配成功,则跳到标号28执行,执行完代码块对应的31、32指令之后,执行35的goto指令跳转到标号55,这样就跳出了switch作用范围,case 1和2也不会被执行。...结语 case中的break告诉前端编译器:「给每个case对应代码块的最后加上goto」。这样,执行完匹配上的代码之后,就可以略过后面的case代码块了。

    77920
    领券