版本

default-case-last

強制 switch 語句中的 default 子句必須是最後一個

switch 語句可以選擇性地包含 default 子句。

如果存在,通常是最後一個子句,但並非必須如此。也允許將 default 子句放在所有 case 子句之前,或介於兩者之間。行為大致上與它是最後一個子句相同。只有在 case 子句中沒有匹配項(包括在 default 之後定義的子句)時,才會執行 default 區塊,但也可以從 default 子句「fall through」到列表中的下一個子句。然而,這種流程並不常見,並且可能會讓讀者感到困惑。

即使沒有「fall through」邏輯,看到 default 子句在 case 子句之前或之間仍然是出乎意料的。按照慣例,它應該是最後一個子句。

如果 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 中引入。

延伸閱讀

資源

變更語言