# default-case-last
强制 switch 语句中的默认子句放在最后
switch
语句可以选择有一个 default
子句。
如果存在,它通常是最后一个子句,但不是必须的。也允许将 default
子句放在所有 case
子句之前,或介于两者之间。行为与最后一个子句基本相同。只有在 case
子句(包括 default
之后定义的)没有匹配的情况下,default
块仍然会被执行,但也可以 "fall through" 从 default
子句到列表中的下一个子句。然而,这样的流程并不常见,它会让读者感到困惑。
即使没有 "fall through" 逻辑,在 case
子句之前或之间看到 default
子句仍然是意料之外的。按照惯例,它应该是最后一个子句。
如果 switch
语句应该有一个 default
子句,则将其定义为最后一个子句被认为是最佳实践。
# 规则详情
此规则强制 switch
语句中的 default
子句位于最后。
它仅适用于已经有 default
子句的 switch
语句。
此规则不强制 default
子句的存在。如果您还想强制在 switch
语句中存在 default
子句,请参见 default-case
。
此规则的错误代码示例:
/*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();
}
此规则的正确代码示例:
/*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();