在JavaScript的switch语句中使用OR运算符

57
我正在使用JavaScript编写一个switch语句:
switch($tp_type){

    case 'ITP':
    $('#indv_tp_id').val(data);
    break;

     case 'CRP'||'COO'||'FOU':
    $('#jurd_tp_id').val(data);
    break;

}

但是我觉得如果我使用OR运算符,它不起作用。在 Javascript 中,我该如何正确实现这个问题呢?如果我选择ITP,我会得到ITP。但是如果我选择COO、FOU或CRP中的任意一个,我总是得到第一个—— CRP。请帮忙解决,谢谢!


3
另请参见JavaScript中switch case的或表达式 - Brad Koch
1个回答

157

你应该像这样重新编写代码:

case 'CRP':
case 'COO':
case 'FOU':
  $('#jurd_tp_id').val(data);
  break;
你可以在switch参考文档中了解它的详细信息。连续 case语句在中间没有break的行为(称为"贯穿")在那里有描述:

与每个 case 标签相关联的可选 break 语句确保程序在执行匹配的语句后跳出 switch,并继续执行 switch 后面的语句。如果省略 break,则程序将继续执行 switch 语句中的下一个语句

至于为什么你的版本只适用于第一个项目(CRP),这只是因为表达式 'CRP'||'COO'||'FOU' 在计算时等同于 'CRP' (因为非空字符串在布尔上下文中被计算为 true)。 因此,该case语句一旦被评估就相当于只是case 'CRP':

8
这被称为“贯穿”:http://zh.wikipedia.org/wiki/switch语句。我认为,把每个`case`放在单独的一行上会使其更易读。 - Felix Kling
1
在 switch 语句中使用计算是否可能?例如,类似于 case (expr / 2 < 10): 这样的表达式? - oldboy
@oldboy,switch语句不应该如此复杂。在那种情况下,只需使用if语句即可。 - mrmicrowaveoven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接