版本

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

资源

更改语言