# no-labels
禁止带标签的语句
JavaScript 中的标记语句与 break
和 continue
结合使用来控制多个循环的流程。例如:
outer:
while (true) {
while (true) {
break outer;
}
}
break outer
语句确保此代码不会导致无限循环,因为在应用 outer
标签后控制权返回到下一条语句。如果将这条语句更改为只是 break
,控制将流回外部 while
语句,并导致无限循环。
虽然在某些情况下很方便,但标签往往很少使用,并且被一些人认为是一种更容易出错且更难理解的流量控制的补救形式。
# 规则详情
该规则旨在消除 JavaScript 中标记语句的使用。每当遇到带标签的语句以及 break
或 continue
与标签一起使用时,它都会发出警告。
此规则的错误代码示例:
/*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;
}
# 何时不使用
如果您需要在任何地方使用带标签的语句,那么您可以安全地禁用此规则。