jshint会抛出一个"Expected a 'break' statement before 'case'"的错误提示。

59

嗨,我在使用jshint验证javascript代码时遇到了问题。 我故意在switch-case中没有使用break语句,但是当jshint检查时,这部分代码会被视为错误。我的代码类似于下面的示例:

    switch (<no>){
    case 1:
        // does something
    case 2:
        //does something more
    default:
        // does something even more
   }

从 'jshint' 的错误信息来看,出现了 Line 203 character 41 的错误:在 'case' 前面应该有一个 'break' 语句。 有什么想法可以避免这个错误吗?或者在这种情况下使用 switch case 是不好的做法吗?


真实世界的案例是什么?为什么不需要使用“break”? - elclanrs
当 case 2 被触发时,我需要执行 case 2 及其以下所有操作。对于所有的 case 都是如此。大致是这样的。我的逻辑没问题,但验证失败了。 - sakthisundar
14
我经常遇到情况,在这些情况下,并不需要在每种情况下都使用 break,这并不算太罕见。 - Gerald Schneider
可能是switch fall through being ignored by JSHint的重复问题。 - falinsky
如果你只是在做一个 fall-through 的话应该没问题,但也许有更好的替代方案,发布你的真实代码会有所帮助。查找字典是一个常见的替代方法。 - elclanrs
当我使用一个相对复杂的语句并在switch中某处使用了return语句时(例如嵌套的switch),同样的情况也会发生。我没有使用break,因为它似乎是多余的。 - Sebastian Simon
2个回答

138

从文档中复制并粘贴:

Switch语句

默认情况下,JSHint会在您省略switch语句内的break或return语句时发出警告:

[...]

如果您确实知道自己在做什么,可以通过添加一个 /* falls through */注释来告诉JSHint,您打算让case块继续执行。

所以在您的情况下:

switch (<no>) {
  case 1:
    // does something
    /* falls through */
  case 2:
    //does something more
    /* falls through */
  default:
    // does something even more
}

37
谢谢你只是直接回答他的问题,而不像其他人那样反复盘问他为什么想这么做 :) - Dave Pile
10
按设计,switch语句支持使用break或不使用break,具体取决于所需的行为。否则,为什么编程语言需要你添加“break”呢? - Eric Rowell

-1

确切地说,break可能完全是多余的,就像这个例子一样

function mapX(x){
  switch (x){
    case 1:
      return A;
    case 2:
      return B;
    default:
      return C;
  }
}

在这种情况下,如果您在return之后加上了breakJS Standard将会抛出一个警告,即Unreachable code
试图调和jshint和JS Standard是棘手的,但正如所述,解决方案是。
function mapX(x){
  switch (x){
    case 1:
      return A;
      /* falls through */
    case 2:
      return B;
      /* falls through */
    default:
      return C;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接