no-labels
禁止标记语句(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;
}
选项
这些选项允许带有循环或切换语句的标签:
"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 中引入的。