版本

no-labels

不允許標籤語句

❄️ 已凍結

此規則目前已凍結,並且不接受功能請求。

JavaScript 中的標籤語句與 breakcontinue 一起使用,以控制多個迴圈周圍的流程。例如

outer:
    while (true) {

        while (true) {
            break outer;
        }
    }

break outer 語句確保此程式碼不會導致無限迴圈,因為在套用 outer 標籤後,控制權會返回到下一個語句。 如果此語句更改為僅 break,則控制權將流回外部 while 語句,並導致無限迴圈。

雖然在某些情況下標籤很方便,但標籤的使用頻率往往很低,並且被某些人認為是一種補救形式的流程控制,這種控制更容易出錯且更難以理解。

規則詳情

此規則旨在消除 JavaScript 中標籤語句的使用。 每當遇到標籤語句以及 breakcontinue 與標籤一起使用時,它都會發出警告。

此規則的 錯誤 程式碼範例

在 Playground 中開啟
/*eslint no-labels: "error"*/

label:
    while(true) {
        // ...
    }

label:
    while(true) {
        break label;
    }

label:
    while(true) {
        continue label;
    }

label:
    switch (a) {
    case 0:
        break label;
    }

label:
    {
        break label;
    }

label:
    if (a) {
        break label;
    }

此規則的 正確 程式碼範例

在 Playground 中開啟
/*eslint no-labels: "error"*/

const f = {
    label: "foo"
};

while (true) {
    break;
}

while (true) {
    continue;
}

選項

選項允許在迴圈或 switch 語句中使用標籤

  • "allowLoop" (boolean,預設為 false) - 如果此選項設定為 true,則此規則會忽略附加到迴圈語句的標籤。
  • "allowSwitch" (boolean,預設為 false) - 如果此選項設定為 true,則此規則會忽略附加到 switch 語句的標籤。

實際上,JavaScript 中的標籤語句可以與迴圈和 switch 語句以外的語句一起使用。 然而,這種方式非常罕見,鮮為人知,因此會讓開發人員感到困惑。

allowLoop

{ "allowLoop": true } 選項的 正確 程式碼範例

在 Playground 中開啟
/*eslint no-labels: ["error", { "allowLoop": true }]*/

label:
    while (true) {
        break label;
    }

allowSwitch

{ "allowSwitch": true } 選項的 正確 程式碼範例

在 Playground 中開啟
/*eslint no-labels: ["error", { "allowSwitch": true }]*/

label:
    switch (a) {
        case 0:
            break label;
    }

何時不該使用

如果您需要在任何地方使用標籤語句,那麼您可以安全地停用此規則。

版本

此規則在 ESLint v0.4.0 中引入。

資源

變更語言