版本

default-case-last

强制 switch 语句中的 default 子句位于最后

switch 语句可以选择性地包含 default 子句。

如果存在,它通常是最后一个子句,但这不是必须的。也允许将 default 子句放在所有 case 子句之前,或介于两者之间。其行为与作为最后一个子句时基本相同。只有当 case 子句(包括在 default 之后定义的子句)中没有匹配项时,default 代码块才会被执行,但也可以从 default 子句“fall through”到列表中的下一个子句。然而,这种流程并不常见,并且会使读者感到困惑。

即使没有“fall through”逻辑,在 case 子句之前或之间看到 default 子句仍然是出乎意料的。按照惯例,它应该作为最后一个子句。

如果 switch 语句应该包含 default 子句,那么将其定义为最后一个子句被认为是最佳实践。

规则详情

此规则强制 switch 语句中的 default 子句位于最后。

它仅适用于已经包含 default 子句的 switch 语句。

此规则不强制要求 default 子句的存在。如果您还想强制要求 switch 语句中 default 子句的存在,请参阅 default-case

此规则的错误代码示例

在 Playground 中打开
/*eslint default-case-last: "error"*/

switch (foo) {
    default:
        bar();
        break;
    case "a":
        baz();
        break;
}

switch (foo) {
    case 1:
        bar();
        break;
    default:
        baz();
        break;
    case 2:
        quux();
        break;
}

switch (foo) {
    case "x":
        bar();
        break;
    default:
    case "y":
        baz();
        break;
}

switch (foo) {
    default:
        break;
    case -1:
        bar();
        break;
}

switch (foo) {
  default:
    doSomethingIfNotZero();
  case 0:
    doSomethingAnyway();
}

此规则的正确代码示例

在 Playground 中打开
/*eslint default-case-last: "error"*/

switch (foo) {
    case "a":
        baz();
        break;
    default:
        bar();
        break;
}

switch (foo) {
    case 1:
        bar();
        break;
    case 2:
        quux();
        break;
    default:
        baz();
        break;
}

switch (foo) {
    case "x":
        bar();
        break;
    case "y":
    default:
        baz();
        break;
}

switch (foo) {
    case -1:
        bar();
        break;
}

if (foo !== 0) {
    doSomethingIfNotZero();
}
doSomethingAnyway();

版本

此规则在 ESLint v7.0.0-alpha.0 中引入。

延伸阅读

资源

更改语言