jquery在交换机案例中使用范围?

时间:2009-10-24 02:07:18

标签: javascript switch-statement

切换案例通常就像

Monday: 
Tuesday: 
Wednesday: 
etc. 

我想使用范围。

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

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

4 个答案:

答案 0 :(得分:14)

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

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传递给开关,那么第一个案例将被执行。在任何相等测试下,!x保证不等于x,这就是switch语句选择执行哪种情况的方式。

答案 1 :(得分:7)

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

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语句更容易阅读。

答案 2 :(得分:1)

你可以制作有趣的克拉奇。例如,要使用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。我没有测试其他浏览器。

答案 3 :(得分:0)

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