Eslint
规则 | Rules

no-labels

禁止标记语句(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; }

选项

这些选项允许带有循环或切换语句的标签:

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

  • "allowSwitch"boolean,默认是false) - 如果设置了此选项true,则此规则将忽略粘贴到开关语句的标签。

实际上 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; }

何时不使用它

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

相关规则

  • no-extra-label

  • no-label-var

  • no-unused-labels

版本

这条规则是在 ESLint 0.4.0 中引入的。

资源