切换情况有条件

时间:2010-04-23 05:36:03

标签: javascript jquery switch-statement

我写的是正确的开关盒吗?

var cnt = $("#div1 p").length;
                alert(cnt);
                switch (cnt) {
                    case (cnt >= 10 && cnt <= 20):
                        alert('10');
                        break;
                    case (cnt >= 21 && cnt <= 30):
                       alert('21');
                        break;
                    case (cnt >= 31 && cnt <= 40):
               alert('31');
                        break;
                    default:
                        alert('>41');
                }

出于某种原因,条件匹配时不会发出警报!

8 个答案:

答案 0 :(得分:87)

通过比较switch()与每个case中的内容,交换机可以正常工作。

switch (cnt) {
    case 1: ....
    case 2: ....
    case 3: ....
}

的工作方式如下:

if (cnt == 1) ...
if (cnt == 2) ...
if (cnt == 3) ...

因此,案例陈述中不能有任何逻辑。

switch (cnt) {
    case (cnt >= 10 && cnt <= 20): ...
}

就像

一样
if (cnt == (cnt >= 10 && cnt <= 20)) ...

那只是胡说八道。 :)

改为使用if () { } else if () { } else { }

答案 1 :(得分:29)

您不应该在此方案中使用switch。这是正确的方法:

var cnt = $("#div1 p").length;

alert(cnt);

if (cnt >= 10 && cnt <= 20)
{
   alert('10');
}
else if (cnt >= 21 && cnt <= 30)
{
   alert('21');
}
else if (cnt >= 31 && cnt <= 40)
{
   alert('31');
}
else 
{
   alert('>41');
}

答案 2 :(得分:23)

这应该适用于此:

var cnt = $("#div1 p").length;

            switch (true) {
                case (cnt >= 10 && cnt <= 20):
                    alert('10');
                    break;
                case (cnt >= 21 && cnt <= 30):
                   alert('21');
                    break;
                case (cnt >= 31 && cnt <= 40):
                    break;
                default:
                    alert('>41');
            }

答案 3 :(得分:10)

我在尝试使用微调器时遇到的一点是在脚本中允许灵活性,而不使用大量的 if 语句。

由于这是一个比通过遍历数组来检查当前类的单个实例更简单的解决方案,因此它可以保持脚本更清晰。欢迎任何有关清洁代码的建议。

$('.next').click(function(){
        var imageToSlide = $('#imageSprite'); // Get id of image

        switch(true) {
            case (imageToSlide.hasClass('pos1')):
                imageToSlide.removeClass('pos1').addClass('pos2');
                break;
            case (imageToSlide.hasClass('pos2')):
                imageToSlide.removeClass('pos2').addClass('pos3');
                break;
            case (imageToSlide.hasClass('pos3')):
                imageToSlide.removeClass('pos3').addClass('pos4');
                break;
            case (imageToSlide.hasClass('pos4')):
                imageToSlide.removeClass('pos4').addClass('pos1');
        }
    }); ` 

答案 4 :(得分:7)

您正在做的是寻找(0)或(1)结果。

(cnt&gt; = 10&amp;&amp; cnt&lt; = 20)返回true或false。

- edit-- 你不能使用布尔(逻辑)经历的案例。语句cnt&gt; = 10为false返回0或为true返回1。因此,我们将案例(1)或案例(0)永远不会与长度相匹配。 --edit -

答案 5 :(得分:4)

function date_conversion(start_date){
    var formattedDate = new Date(start_date);
    var d = formattedDate.getDate();
    var m =  formattedDate.getMonth();
    var month;
    m += 1;  // JavaScript months are 0-11
    switch (m) {
        case 1: {
            month="Jan";
            break;
        }
        case 2: {
            month="Feb";
            break;
        }
        case 3: {
            month="Mar";
            break;
        }
        case 4: {
            month="Apr";
            break;
        }
        case 5: {
            month="May";
            break;
        }
        case 6: {
            month="Jun";
            break;
        }
        case 7: {
            month="Jul";
            break;
        }
        case 8: {
            month="Aug";
            break;
        }
        case 9: {
            month="Sep";
            break;
        }
        case 10: {
            month="Oct";
            break;
        }
        case 11: {
            month="Nov";
            break;
        }
        case 12: {
            month="Dec";
            break;
        }
    }
    var y = formattedDate.getFullYear();
    var now_date=d + "-" + month + "-" + y;
    return now_date;
}

答案 6 :(得分:1)

切换案例是每个帮助全部而不是if else语句:

     switch ($("[id*=btnSave]").val()) {
        case 'Search':
            saveFlight();
            break;
        case 'Update':
            break;
        case 'Delete':
            break;
        default:
            break;
    }

答案 7 :(得分:0)

好的,但是已经晚了,但是如果您或其他人仍然希望您使用switch或只是对switch语句的工作原理有了更好的了解。

出问题的是,您的switch表达式应严格匹配case表达式之一。如果没有匹配项,它将查找默认值。您仍然可以在进行短路评估的&&运算符中使用表达式。

好吧,你已经知道了。为了匹配严格比较,您应该在所有case表达式&& cnt的末尾添加。

请关注:

switch(mySwitchExpression)
case customEpression && mySwitchExpression: StatementList
.
.
.
default:StatementList

var cnt = $("#div1 p").length;
alert(cnt);
switch (cnt) {
case (cnt >= 10 && cnt <= 20 && cnt):
    alert('10');
    break;
case (cnt >= 21 && cnt <= 30 && cnt):
    alert('21');
    break;
case (cnt >= 31 && cnt <= 40 && cnt):
    alert('31');
    break;
default:
    alert('>41');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div1">
<p> p1</p>
<p> p2</p>
<p> p3</p>
<p> p3</p>
<p> p4</p>
<p> p5</p>
<p> p6</p>
<p> p7</p>
<p> p8</p>
<p> p9</p>
<p> p10</p>
<p> p11</p>
<p> p12</p>
</div>