布尔运算符在switch语句中?

问题描述:

有没有什么方法可以在语法上使用开关进行工作?布尔运算符在switch语句中?

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

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

注:“其他”不需要,我只是表明你可以叠加使用默认情况下也是如此。

JavaScript不起作用。像这样做:

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

像C,JavaScript的case子句将级联。

+0

杜!谢谢。我不知道我怎么没有想到这一点。 编辑 - 谢谢大家!对不起,我是个白痴。 – Greg 2010-07-12 04:10:32

你的榜样的问题是表达('foo' || 'bar')计算结果为'foo',因此,当i'foo'它只会匹配,决不当i'bar'

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

但是,在JavaScript中,每个case都会进入下一个案例,除非您明确中断breakreturn的流程。因此,你可以很容易使其工作如下:

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'); 
} 

official Mozilla Developer Center docs,使用多个的情况下,像这样:

// 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>"); 
} 

或者,如果寻找一个IE的解决方案,你会使用JScript docs for switch这是指区分条件“标签”,并指出:

如果没有使用 break语句,则会执行多个标签块。

有效地说,两套文档都说将多个案例放在一起是一回事。

会沿着这条线工作?

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'); 
     break; 
} 

您必须设置独立的情况下,每个值。

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

使用你的代码,你将只能得到警告,如果i计算结果为真,因为字符串不为空也计算为真。