切换案例通常就像

Monday: 
Tuesday: 
Wednesday: 
etc. 

我想使用范围。

from 1-12: 
from 13-19:
from 20-21:
from 22-30:

有可能吗?顺便说一句,我正在使用javascript / jquery。

有帮助吗?

解决方案

你可以尝试滥用开关堕落行为

var x = 5;
switch (x) {
    case  1: case 2: case 3: case 4: ...
        break;
    case 13: case 14: case 15: ...
        break;
    ...
}

非常详细

或者你可以试试这个

function checkRange(x, n, m) {
    if (x >= n && x <= m) { return x; }
    else { return !x; }
}

var x = 5;
switch (x) {
    case checkRange(x, 1, 12):
        //do something
        break;
    case checkRange(x, 13, 19):
    ...
}

这可以帮助您获得所需的行为。我在checkRange的else中返回!x 的原因是为了防止将 undefined 传递给switch语句时的问题。如果您的函数返回 undefined (如jdk的示例所示)并将 undefined 传递给switch,那么将执行第一个案例。在任何相等的测试下,!x 保证不等于 x ,这就是switch语句选择执行哪种情况的方式。

其他提示

晚会,但在寻找同一问题的答案时,我遇到了这个帖子。目前我实际上使用的是开关,但方式不同。例如:

switch(true) {
    case (x >= 1 && x <= 12):
        //do some stuff
        break;
    case (x >= 13 && x <= 19):
        //do some other stuff                
        break;
    default:
        //do default stuff
        break;
}

我发现这比一堆IF语句更容易阅读。

你可以制作有趣的克拉奇。例如,要使用JavaScript开关在范围内测试数字,可以编写自定义函数。基本上有函数测试给n值并且如果它在范围内则返回它。否则返回undefined或其他虚拟值。

<script>

// Custom Checking Function..
function inRangeInclusive(start, end, value) {
    if (value <= end && value >= start)
        return value; // return given value
    return undefined; 
}

// CODE TO TEST FUNCTION
var num = 3;
switch(num) {
case undefined:
    //do something with this 'special' value returned by the inRangeInclusive(..) fn
    break;
case inRangeInclusive(1, 10, num):
    alert('in range');
    break;
default:
    alert('not in range');
    break;
}

</script>

这适用于Google Chrome。我没有测试其他浏览器。

不,您需要使用if / else if系列来执行此操作。 JavaScript不是这种幻想。 (语言不多。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top