有没有什么方法可以在语法上使用开关工作?
switch(i){
case ('foo' || 'bar'):
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
答案 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'
都会进入下一个案例,除非您使用case
或break
明确地破坏了流量。因此,您可以轻松地使其工作如下:
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。