Javascript switch语句中的布尔运算符?

Javascript switch语句中的布尔运算符?,javascript,Javascript,从语法上讲,有没有办法通过开关来实现这一点 switch(i){ case ('foo' || 'bar'): alert('foo or bar'); break; default: alert('not foo or bar'); } JavaScript不是这样工作的。这样做: switch(i){ case 'foo': case 'bar': alert('foo or bar');

从语法上讲,有没有办法通过开关来实现这一点

switch(i){
    case ('foo' || 'bar'):
        alert('foo or bar');
        break;
    default:
        alert('not foo or bar');
}

JavaScript不是这样工作的。这样做:

switch(i){
    case 'foo':
    case 'bar':
        alert('foo or bar');
        break;
    default:
        alert('not foo or bar');
}
switch(i){
    case 'foo':
    case 'bar':
        alert('foo or bar');
        break;
    default:
        alert('not foo or bar');
}

与C类似,JavaScript的
case
子句将级联。

示例的问题是表达式
('foo'|'bar')
的计算结果为
'foo'
,因此它仅在
i
'foo'
时匹配,而在
i
'bar'
时从不匹配

如果第一个操作数为truthy,则
|
运算符生成其第一个操作数的值。否则,它将生成第二个操作数的值。非空字符串总是真实的,这就是表达式返回
'foo'
的原因

但是,在JavaScript中,每一个
案例
都会进入下一个案例,除非您使用
中断
返回显式中断流程。因此,您可以按如下方式轻松地使其工作:

switch(i) {
    case 'foo':
    case 'bar':
        alert('foo or bar');
        break;
    default:
        alert('not foo or bar');
}
注意:“other”不是必需的,我只是展示了您也可以使用默认值来堆叠案例

中,使用以下多种情况:

 // multiple cases:      

   case "Mangoes":  
   case "Papayas":  
      document.write("Mangoes and papayas are $2.79 a pound.<br>");  
      break;  
   default:  
      document.write("Sorry, we are out of " + expr + ".<br>");  
 }
//多个案例:
案例“芒果”:
“木瓜”案:
写下(“芒果和木瓜每磅2.79美元,
”; 打破 违约: 文档。写下(“对不起,我们没有“+expr+”
”; }
或者,如果要寻找IE解决方案,您可以使用,将案例条件称为“标签”,并说明:

如果出现以下情况,将执行多个标签块: 不使用break语句


实际上,这两套文档在将多个案例放在一起时说的是同一件事。

这样做行得通吗

switch(i){ 
    case ('foo'):
    case ('bar'): 
        alert('foo or bar'); 
        break; 
    default: 
        alert('not foo or bar'); 
} 
开关(一) { 案例“foo”: “酒吧”一案: 警报(“foo或bar”); 打破 违约: 警惕(“不是foo或bar”); 打破 }
必须为每个值设置单独的案例

switch(i)
{ 
    case 'foo': 
    case 'bar': 
        alert('foo or bar'); 
        break; 
    default: 
        alert('not foo or bar'); 
}

使用您的代码,只有当
i
的计算结果为true时,您才会收到警报,因为非空字符串的计算结果也为true。

Duh!谢谢我不知道我怎么没想到。编辑-谢谢大家!对不起,我是个白痴。 switch(i) { case 'foo': case 'bar': alert('foo or bar'); break; default: alert('not foo or bar'); break; }
switch(i)
{ 
    case 'foo': 
    case 'bar': 
        alert('foo or bar'); 
        break; 
    default: 
        alert('not foo or bar'); 
}