版本

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

资源

更改语言