版本

default-case-last

強制 switch 語句中的 default 子句位於最後

switch 語句可以選擇性地具有 default 子句。

如果存在,它通常是最後一個子句,但它不一定要是。 也允許將 default 子句放在所有 case 子句之前,或在它們之間的任何位置。 其行為與它是最後一個子句時大致相同。 default 區塊仍然只會在 case 子句(包括在 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 中引入。

延伸閱讀

資源

變更語言