问题 使用javascript switch语句的最佳实践


我正在使用switch语句编写一个jquery脚本,我想知道当几个'case'共享一些属性时最好的解决方案是什么,让我说我有这样的模式:

switch (settings.xxx) {
case 'case1':
    Execute some code
    break;
case 'case2':
    Execute some code
    break;
case 'case3':
    Execute some code
    break;
}

对于每种情况,我都有很多部分重复的代码,因为有些属性在3种情况下很常见。所以我的问题是,我可以这样做:

switch (settings.xxx) {

case 'case1':
case 'case2':
case 'case3':
    Execute some code
    break;

}

switch (settings.xxx) {

case 'case1':
case 'case2':
    Execute some code
    break;
case 'case2':
case 'case3':
    Execute some code
    break;

}

或者这是一种不好的做法?


5937
2017-11-26 17:23


起源

这三种情况的“某些代码”是否相同? - War10ck
第二个不能像你期望的那样工作。在 case 2,只有第一个代码被执行,然后你 break 在switch语句之外。这个起见只适用于 case 1。 - Bergi
如果你被迫这样写,也许是 switch 声明不是要走的路。 - Zirak
只是为了澄清,“一些代码”意味着这些部分共享几行。假设case1和case2共享2-3行的一部分,case2与case3共享另外2-3行。这有点理论上但我想避免发布可能不必要的完整代码块... - user1854123


答案:


不,这不是不好的做法。实际上,这是一个很好的做法。这样,你会的 不要重复自己

另外,看看文档: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/switch


12
2017-11-26 17:25



非常感谢你 ! - user1854123


最佳做法是避免重复代码。这样,如果您以后需要修改代码,则无需记住在多个位置执行此操作。

在某些代码仅适用于某些情况的情况下,您可以省略休息,执行第一部分后执行将进入下一部分。这仅适用于在一般案例代码之前执行特殊情况代码的情况。执行此操作时要小心,并添加注释,明确说明您是故意这样做的。否则,如果稍后编辑代码,则其他人可能没有意识到它是故意的,并在缺少的位置添加中断。见下文:

switch (settings.xxx) {
case 'case1':
case 'case2':
    Execute some code that applies to cases 1 & 2
    // break left out to allow execution to fall through
case 'case3':
    Execute some code that applies to cases 1 - 3
    break;
case 'case4':
    Execute different code
    break;
}

4
2018-06-07 14:35