# default-case-last

强制 switch 语句中的默认子句放在最后

switch 语句可以选择有一个 default 子句。

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

即使没有 "fall through" 逻辑,在 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();
Last Updated: 5/13/2023, 8:55:38 PM