版本

no-labels

禁止使用带标签的语句

JavaScript 中的带标签语句与breakcontinue结合使用,以控制围绕多个循环的流程。例如

outer:
    while (true) {

        while (true) {
            break outer;
        }
    }

break outer语句确保此代码不会导致无限循环,因为控制权将返回到应用outer标签后的下一条语句。如果此语句更改为仅break,则控制权将流回外部while语句,从而导致无限循环。

虽然在某些情况下很方便,但标签的使用频率往往很低,并且一些人认为它是一种补救性的流程控制形式,更容易出错且难以理解。

规则详情

此规则旨在消除 JavaScript 中带标签语句的使用。每当遇到带标签语句以及breakcontinue与标签一起使用时,它都会发出警告。

此规则的错误代码示例

在代码游乐场中打开
/*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;
    }

此规则的正确代码示例

在代码游乐场中打开
/*eslint no-labels: "error"*/

var f = {
    label: "foo"
};

while (true) {
    break;
}

while (true) {
    continue;
}

选项

这些选项允许使用循环或 switch 语句的标签

  • "allowLoop"boolean,默认为false) - 如果此选项设置为true,则此规则会忽略粘贴到循环语句的标签。
  • "allowSwitch"boolean,默认为false) - 如果此选项设置为true,则此规则会忽略粘贴到 switch 语句的标签。

实际上,JavaScript 中的带标签语句可以与除循环和 switch 语句之外的其他语句一起使用。但是,这种方式非常罕见,不太为人所知,因此会让开发人员感到困惑。

allowLoop

{ "allowLoop": true }选项的正确代码示例

在代码游乐场中打开
/*eslint no-labels: ["error", { "allowLoop": true }]*/

label:
    while (true) {
        break label;
    }

allowSwitch

{ "allowSwitch": true }选项的正确代码示例

在代码游乐场中打开
/*eslint no-labels: ["error", { "allowSwitch": true }]*/

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

何时不使用它

如果您需要在任何地方使用带标签的语句,那么您可以安全地禁用此规则。

版本

此规则是在 ESLint v0.4.0 中引入的。

资源

更改语言