0

我正在通过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 */
}

从谷歌搜索我发现了这个 Github 问题,但看起来那是因为只有 1 个case

我怎样才能解决这个问题?我看不出这switch应该是一个if. 我正在使用的事实可能switch(true)与它有关吗?

另外:在线版本上的代码 lints 很好(我使用的是 Notepad++ 插件)。

4

2 回答 2

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=');
    }
}

它使语句保持干燥,并且更容易阅读 imo。如果您对一个值进行直接相等,那么 switch 将很有用,但它<会带走 switch 语句的所有“优点”。

于 2013-09-25T22:38:13.777 回答
-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
}
于 2013-09-25T22:27:22.073 回答