Javascript switch语句中的布尔运算符?
从语法上讲,有没有办法通过开关来实现这一点Javascript switch语句中的布尔运算符?,javascript,Javascript,从语法上讲,有没有办法通过开关来实现这一点 switch(i){ case ('foo' || 'bar'): alert('foo or bar'); break; default: alert('not foo or bar'); } JavaScript不是这样工作的。这样做: switch(i){ case 'foo': case 'bar': alert('foo or bar');
switch(i){
case ('foo' || 'bar'):
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
JavaScript不是这样工作的。这样做:
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');
}
与C类似,JavaScript的
case
子句将级联。示例的问题是表达式('foo'|'bar')
的计算结果为'foo'
,因此它仅在i
为'foo'
时匹配,而在i
为'bar'
时从不匹配
如果第一个操作数为truthy,则|
运算符生成其第一个操作数的值。否则,它将生成第二个操作数的值。非空字符串总是真实的,这就是表达式返回'foo'
的原因
但是,在JavaScript中,每一个案例
都会进入下一个案例,除非您使用中断
或返回显式中断流程。因此,您可以按如下方式轻松地使其工作:
switch(i) {
case 'foo':
case 'bar':
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
注意:“other”不是必需的,我只是展示了您也可以使用默认值来堆叠案例 从中,使用以下多种情况:
// 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>");
}
//多个案例:
案例“芒果”:
“木瓜”案:
写下(“芒果和木瓜每磅2.79美元,
”;
打破
违约:
文档。写下(“对不起,我们没有“+expr+”
”;
}
或者,如果要寻找IE解决方案,您可以使用,将案例条件称为“标签”,并说明:
如果出现以下情况,将执行多个标签块:
不使用break语句
实际上,这两套文档在将多个案例放在一起时说的是同一件事。这样做行得通吗
switch(i){
case ('foo'):
case ('bar'):
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
开关(一)
{
案例“foo”:
“酒吧”一案:
警报(“foo或bar”);
打破
违约:
警惕(“不是foo或bar”);
打破
}
必须为每个值设置单独的案例
switch(i)
{
case 'foo':
case 'bar':
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
使用您的代码,只有当i
的计算结果为true时,您才会收到警报,因为非空字符串的计算结果也为true。Duh!谢谢我不知道我怎么没想到。编辑-谢谢大家!对不起,我是个白痴。
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');
}