版本

default-case-last

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

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

如果存在,它通常是最后一个子句,但它不必是最后一个。也可以将 default 子句放在所有 case 子句之前,或者放在任何 case 子句之间。其行为与它是最后一个子句时基本相同。如果 case 子句(包括 default 之后定义的子句)中没有匹配项,则 default 块仍然会被执行,但是也可以从 default 子句“贯穿”到列表中的下一个子句。但是,这种流程并不常见,它会让读者感到困惑。

即使没有“贯穿”逻辑,在 case 子句之前或之间看到 default 子句也是意料之外的。按照惯例,预计它将是最后一个子句。

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

规则详细信息

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

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

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

此规则的不正确代码示例

在游乐场中打开
/*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();
}

此规则的正确代码示例

在游乐场中打开
/*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 中引入。

进一步阅读

资源

更改语言