Skip to content
← Back to rules

eslint/no-labels 风格

它的作用

禁止使用标签语句。

为什么这是不好的?

在 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

type: boolean

默认值: false

若设置为 true,则该规则会忽略紧邻循环语句的标签。 当此选项设置为 true 时的 正确 代码示例:

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

allowSwitch

type: boolean

默认值: false

若设置为 true,则该规则会忽略紧邻 switch 语句的标签。 当此选项设置为 true 时的 正确 代码示例:

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

如何使用

要通过配置文件或 CLI 启用 此规则,可以使用:

json
{
  "rules": {
    "no-labels": "error"
  }
}
bash
oxlint --deny no-labels

参考资料