通过MarvinLabs增加答案以使其更干净:
var x = this.dealer;
switch (true) {
case (x < 5):
alert("less than five");
break;
case (x < 9):
alert("between 5 and 8");
break;
case (x < 12):
alert("between 9 and 11");
break;
default:
alert("none");
break;
}
没有必要检查范围的下限,因为语句将导致执行跳过剩余的情况,所以当执行开始检查时,例如(x <9),我们知道值必须为5或更大。break
当然,只有当情况保持在原始顺序时,输出才是正确的,并且我们假设整数值(如问题中所述) - 从技术上讲,范围在5到8.999999999999999左右,因为js中的所有数字实际上都是双精度浮点数。
如果您希望能够移动事例,或者发现在每个事例语句中都可以看到全部范围更具可读性,只需为每个事例的下限范围添加一个小于或等于的检查:
var x = this.dealer;
switch (true) {
case (x < 5):
alert("less than five");
break;
case (x >= 5 && x < 9):
alert("between 5 and 8");
break;
case (x >= 9 && x < 12):
alert("between 9 and 11");
break;
default:
alert("none");
break;
}
请记住,这增加了额外的人为错误点 - 有人可能会尝试更新范围,但忘记在两个地方进行更改,留下未覆盖的重叠或间隙。例如,在这里,当我只是编辑过去匹配8的情况时,8的情况现在将不匹配任何东西。
case (x >= 5 && x < 8):
alert("between 5 and 7");
break;
case (x >= 9 && x < 12):
alert("between 9 and 11");
break;