【发布时间】:2018-04-23 10:02:11
【问题描述】:
我想知道是否可以将多个 if 语句重写为 switch。
问题是switch 运行:
-
案例通过检查后的所有代码。这就是为什么 case 语句在第一个 case 之后运行所有代码的原因。
let arr = [1, 3]; if( arr.includes(1) === true ) { console.log('if 1'); } if( arr.includes(2) === true) { console.log('if 2'); } if( arr.includes(3) === true) { console.log('if 3'); } switch( true ){ case arr.includes(1): console.log('switch 1'); case arr.includes(2): console.log('switch 2'); case arr.includes(3): console.log('switch 3'); }- 如果一个开关在每种情况下都有中断,它会运行一个通过测试的情况。
let arr = [1, 3];
if( arr.includes(1) === true ) {
console.log('if 1');
}
if( arr.includes(2) === true) {
console.log('if 2');
}
if( arr.includes(3) === true) {
console.log('if 3');
}
switch( true ){
case arr.includes(1):
console.log('switch 1');
break;
case arr.includes(2):
console.log('switch 2');
break;
case arr.includes(3):
console.log('switch 3');
break;
}
所以问题是:如何将多个if 语句重写为单个switch 语句?
如果我不能:有没有比多个if 语句更优雅的语法,这表明我在进行类似的比较?
【问题讨论】:
-
第一个代码示例似乎是您所追求的,您的问题是什么?
-
@George Bailey 不,我不能。检查第一个示例。在
case传递开关中的值后,它将运行另一个switch-es 中的所有后续代码,无论这些开关是否与案例具有相同的值。 -
是的,
switch就是这样工作的。所以第二个应该是你想要的。如果你不喜欢没有break的switch行为,那你为什么要切换到switch呢? -
嗯,
switch的方式原本是打算的,它只应该执行一个分支。即使您设法将其破解为您想要的方式(我不确定这是否可能),它也可能因此而误导外部读者。
标签: javascript if-statement switch-statement