# 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;
    }

# 何时不使用

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

Last Updated: 5/13/2023, 8:55:38 PM