布尔运算符在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
子句将级联。
答
你的榜样的问题是表达('foo' || 'bar')
计算结果为'foo'
,因此,当i
是'foo'
它只会匹配,决不当i
是'bar'
。
如果第一个操作数是truthy,则||
运算符会生成其第一个操作数的值。否则它会生成第二个操作数的值。一个非空字符串总是真的,这就是为什么你的表达式返回'foo'
。
但是,在JavaScript中,每个case
都会进入下一个案例,除非您明确中断break
或return
的流程。因此,你可以很容易使其工作如下:
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
计算结果为真,因为字符串不为空也计算为真。
杜!谢谢。我不知道我怎么没有想到这一点。 编辑 - 谢谢大家!对不起,我是个白痴。 – Greg 2010-07-12 04:10:32