我正在通过JSHint运行我的代码,而且我遇到了这个错误:
此
switch
应为if
在这段代码上:
switch(true)
{
case Major === 0 && Minor === 0 && Patch < 433:
upgraded = upgraded.replace(/(\s+)skill(\d)=/gm, '$1section_8_$2_body=');
/* falls through */
case Major === 0 && Minor === 0 && Patch < 442:
upgraded = upgraded.replace(/test=/gm, 'void=');
/* falls through */
case Major === 0 && Minor === 0 && Patch < 459:
upgraded = upgraded.replace(/another=/gm, 'void=');
/* falls through */
}
从谷歌搜索我发现this Github issue,但看起来那是因为只有case
。
我该如何解决这个问题?我认为switch
没有理由应该是if
。我使用switch(true)
的事实可能与它有关吗?
除此之外:代码在网上版本上很好(我使用的是Notepad ++插件)。
答案 0 :(得分:1)
我会做类似的事情:
if(Major === 0 && Minor === 0){
if(Patch < 433) {
upgraded = upgraded.replace(/(\s+)skill(\d)=/gm, '$1section_8_$2_body=');
}
if(Patch < 442) {
upgraded = upgraded.replace(/test=/gm, 'void=');
}
if(Patch < 459) {
upgraded = upgraded.replace(/another=/gm, 'void=');
}
}
它保持语句DRYer并且更容易阅读imo。如果您对值进行直接相等,但<
取消了switch语句的所有“优点”,那么切换将非常有用。
答案 1 :(得分:-1)
switch
语句用于根据有限的已知可能值列表测试单个变量或表达式(枚举)
var userColor = 'red';
switch(userColor){
case 'red':
alert('Stop');
break;
case 'yellow':
alert('Slow');
break;
case 'green':
alert('Go');
break;
}
该代码本质上是一个快捷方式:
if(userColor == 'red'){
alert('Stop');
}else if(userColor == 'yellow'){
alert('Slow');
}else if(userColor == 'green'){
alert('Go')
}
在您提供的代码中,唯一的决定因素是Patch
的值,因为其余变量始终为0。
我建议您将代码重构为一系列if / else语句
if(Patch < 433){
//...
}else if(Patch < 442){
//...
}else if(Patch < 459){
//...
}else{
//... fall through
}