在 JavaScript 中打开整数范围

2022-08-30 02:06:57

我想做这样的事情

    switch (this.dealer) {
        case 1-4: 
            // Do something.
            break;
        case 5-8: 
            // Do something.
            break;
        case 9-11: 
            // Do something.
            break;
        default:
            break;
    }

正确的语法是什么?在 JavaScript 中可能吗?

整数也是如此,如果它介于这些值之间,请执行某些操作。this.dealer


答案 1

这是我弄清楚的另一种方式:

const 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;
}

答案 2

通过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;