default-case-last
Enforce default clauses in switch statements to be last
一个 switch
语句可以选择有一个 default
子句。
如果有的话它通常是最后一个子句,但也不一定要这样。也可以把 default
子句放在所有 case
子句之前,或者放在两者之间的任何地方。其行为与最后一个子句基本相同。只有在 case
子句(包括 default
之后定义的子句)中没有匹配的情况下,default
块才会被执行,但是也可以从 default
子句“fall through”到列表中的后续子句。然而,这种跨越并不常见,而且会让人感到困惑。
即使没有“fall through”逻辑,看到 default
子句在 case
子句之前或之间仍然是意想不到的。按照惯例,它应该是最后一个子句。
如果一个 switch
语句应该有一个 default
子句,将其定义为最后一个子句被认为是最佳做法。
规则细节
这条规则强制要求 switch
语句中的 default
子句排在最后。
它只适用于已经有 default
子句的 switch
语句。
这条规则并不强制要求 default
子句的存在。如果你也想在 switch
语句中强制执行 default
子句的存在,请参见 default-case。
使用此规则的错误示例:
Open in Playground
/*eslint default-case-last: "error"*/
switch (foo) {
default:
bar();
break;
case "a":
baz();
break;
}
switch (foo) {
case 1:
bar();
break;
default:
baz();
break;
case 2:
quux();
break;
}
switch (foo) {
case "x":
bar();
break;
default:
case "y":
baz();
break;
}
switch (foo) {
default:
break;
case -1:
bar();
break;
}
switch (foo) {
default:
doSomethingIfNotZero();
case 0:
doSomethingAnyway();
}
使用此规则的正确示例:
Open in Playground
/*eslint default-case-last: "error"*/
switch (foo) {
case "a":
baz();
break;
default:
bar();
break;
}
switch (foo) {
case 1:
bar();
break;
case 2:
quux();
break;
default:
baz();
break;
}
switch (foo) {
case "x":
bar();
break;
case "y":
default:
baz();
break;
}
switch (foo) {
case -1:
bar();
break;
}
if (foo !== 0) {
doSomethingIfNotZero();
}
doSomethingAnyway();
Related Rules
Version
This rule was introduced in ESLint v7.0.0-alpha.0.