switch语句中的布尔运算符?

时间:2010-07-12 04:07:00

标签: javascript

有没有什么方法可以在语法上使用开关工作?

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

8 个答案:

答案 0 :(得分:13)

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

注意:“other”不是必需的,我只是表明您可以使用默认值来堆叠案例。

答案 1 :(得分:5)

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 将案例条件称为“标签”并声明:

  

如果a,则执行多个标签块   不使用break语句。

有效地,两套文件都说明了将多个案例放在一起的相同方法。

答案 2 :(得分:3)

JavaScript无法正常工作。这样做:

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

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

答案 3 :(得分:1)

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

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

但是,在JavaScript中,每个'foo'都会进入下一个案例,除非您使用casebreak明确地破坏了流量。因此,您可以轻松地使其工作如下:

return

答案 4 :(得分:1)

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

答案 5 :(得分:1)

这条线上有什么用吗?

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

您必须为每个值设置单独的案例。

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

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