Skip to content
← Back to rules

eslint/no-labels Style

它的作用

禁止使用带标签的语句。

为什么这很糟糕?

JavaScript 中的带标签语句与 breakcontinue 一起使用,用于控制多个循环之间的流程。例如:

js
outer: while (true) {
  while (true) {
    break outer;
  }
}

break outer 语句可确保这段代码不会进入无限循环,因为控制流会在应用了 outer 标签后的下一条语句继续执行。如果将这条语句改为仅使用 break,控制流就会回到外层 while 语句,从而导致无限循环。 虽然在某些情况下很方便,但标签通常很少使用,并且一些人认为它是一种补救式的流程控制方式,更容易出错,也更难理解。

示例

此规则的错误代码示例:

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

此规则的正确代码示例:

js
var f = {
  label: "foo",
};

while (true) {
  break;
}

while (true) {
  continue;
}

配置

此规则接受一个包含以下属性的配置对象:

allowLoop

类型:boolean

默认值:false

如果设置为 true,此规则会忽略附着在循环语句上的标签。 将此选项设置为 true 时的正确代码示例:

js
label: while (true) {
  break label;
}

allowSwitch

类型:boolean

默认值:false

如果设置为 true,此规则会忽略附着在 switch 语句上的标签。 将此选项设置为 true 时的正确代码示例:

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

如何使用

To enable this rule using the config file or in the CLI, you can use:

json
{
  "rules": {
    "no-labels": "error"
  }
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  rules: {
    "no-labels": "error",
  },
});
bash
oxlint --deny no-labels

版本

此规则在 v0.15.4 中加入。

参考资料