switch语句中的布尔运算符?

7
有没有办法在语法上使用switch使它工作?
switch(i){
    case ('foo' || 'bar'):
        alert('foo or bar');
        break;
    default:
        alert('not foo or bar');
}
8个回答

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

注意:"other"不是必需的,我只是想展示你也可以在默认情况下使用多个switch case语句。


5

根据Mozilla官方开发者中心文档,可以使用多个case语句:

 // 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 switch文档,其中将case条件称为“标签”,并指出:

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

实际上,两组文档都在讲述将多个case放在一起的相同内容。


3

JavaScript并不是那样工作的。请按照以下方式进行操作:

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

与C语言类似,JavaScript的case子句会进行级联。


哎呀!谢谢。我不知道为什么我没想到那个。编辑 - 谢谢大家!很抱歉我是个白痴。 - Greg

1

你的例子问题在于表达式('foo' || 'bar')的求值结果是'foo',因此只有当i'foo'时才会匹配,而i'bar'时永远不会匹配。

||运算符如果第一个操作数为真,则产生第一个操作数的值。否则它将产生第二个操作数的值。非空字符串始终为真,这就是为什么你的表达式返回'foo'的原因。

然而,在JavaScript中,每个case都会顺着流程执行到下一个case,除非你显式地使用breakreturn来打断流程。因此,你可以很容易地让它正常工作,方法如下:

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

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

1

这样的代码行得通吗?

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

1

你必须为每个值设置单独的情况。

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

使用你的代码,只有在i评估为true时才会收到提示,因为一个非空字符串也会被评估为true。

1
switch(i)
{
    case 'foo':
    case 'bar':
        alert('foo或者bar');
        break;
    default:
        alert('不是foo或者bar');
        break;
}

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