版本

default-case-last

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

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

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

即使没有“贯穿”逻辑,在 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 中引入的。

进一步阅读

资源

更改语言