• 怪异的JavaScript的Case语句


    之前用来JS写了一个返回每个月天数的JS代码如下:

    switch (varMonth) {

        case 1,3,5,7,8,10,12 :

            lngDay = 31;

            break;

        case 4,6,9,11 :

            lngDay = 30;

            break;

        case 2 :

            if ((varYear % 4 == 0 && varYear % 100 != 0) || (varYear % 400 == 0))

                lngDay = 29;

            else

                lngDay = 28;

            break;

        } // switch

    可能当时用2月测试的,感觉没问题就没继续测试,没想到今天测试人员发现其它月份的天数不对,我很疑惑,测试一下果然,究竟是怎么回事?因为这段代码主要在chrome控件中用,我在开发工具中看这段代码没提示任何错误,无奈我写了个测试函数alert返回每个月的天数,当传入月份2一切正常,传入其它月份就总是出现undifned等错误,对比代码想到有可能是Case后面各值用","隔开的原因,上网搜了Javascript case语句的用法,果然没有那种隔开的写法,只有下面这种用法:

    case 1:

    case 2:

    //想到于if(num==1 ||num==2)

    alert("show 1 or 2!");

    break

    于是改正之,没想到一开始居然写成:case 1:

    2:

    3: ……

    自己还郁闷为什么开发工具总是报错?后来把另一同事叫过来才知道少写了case,没想到我居然如此粗心,看来今天不在状态啊。

    看到一篇讲JavaScript中Case if用法的感觉也不错,转贴一下:http://blog.csdn.net/swallowgy/article/details/5070831

    发现自己代码中用if的地方比较多,于是就在上周对case语句好好研究了一番并优化了自己的部分代码。因此出现了如下if和case的比较一说。声明当case的条件块中没用break时候,是和if一样的一个一个的条件来判断执行。当条件中有了break,编译器会为它做二分法优化(或跳转表),就是根据条件来跳转,平均性能高于if。

    定义: docStatus该文档的当前状态

    if 语句

    在一个指定的条件成立时执行代码。

    语法:if(条件)

    {

    条件成立时执行代码

    }

    例子:if(docStatus=="通过")

    {

    alert("文档的当前状态为通过");

    }

    说明: docStatus该文档的当前状态

    注意:使用双等号 (==) 来比较变量!在语法中没有 else。仅仅当条件为 true 时,代码才会执行。

    if...else 语句

    在指定的条件成立时执行代码,当条件不成立时执行另外的代码。 如果希望条件成立时执行一段代码,而条件不成立时执行另一段代码,那么可以使用 if....else 语句。

    语法:if(条件)

    {

    条件成立时执行代码

    }

    else

    {

    条件不成立时执行代码

    }

    例子:if(docStatus=="通过")

    {

    alert("文档的当前状态为通过");

    }

    else

    {

    alert("文档的当前状态为没有通过");

    }

    if...else if....else 语句

    使用这个语句可以选择执行若干块代码中的一个。

    当需要选择多套代码中的一套来运行时,请使用 if....else if...else 语句。

    语法:if(条件1)

    {

    条件1成立时执行代码

    }

    else if (条件2)

    {

    条件2成立时执行代码

    }

    else

    {

    条件1和条件2均不成立时执行代码

    }

    例子:if(docStatus=="新文档")

    {

    alert("文档的当前状态为新文档");

    }

    else if(docStatus=="通过")

    {

    alert("文档的当前状态为通过");

    }

    else

    {

    alert("文档的当前状态即不是新文档也不是通过");

    }

     

    switch 语句

    使用这个语句可以选择执行若干块代码中的一个。

    如果希望选择执行若干代码块中的一个,你可以使用 switch 语句:

    语法:switch(n)

    {

    case 1:

    执行代码块 1

    break

    case 2:

    执行代码块 2

    break

    default:

    如果n即不是1也不是2,则执行此代码

    }

    工作原理:switch 后面的 (n) 可以是表达式,也可以(并通常)是变量。然后表达式中的值会与 case 中的数字作比较,如果与某个 case 相匹配,那么其后的代码就会被执行。break 的作用是防止代码自动执行到下一行。

    说明:num为整数数字。

    例子1:

    switch(num)

    {

    case 1:

    alert("show 1!");

    break

    case 2:

    alert("show 2!");

    break

    case 3:

    alert("show 3!");

    break

    default:

    alert("show others!");

    break;

    }

    例子2:

    switch(num)

    {

    case 1:

    alert("show 1!");

    //没有break,接续执行case2

    case 2:

    alert("show 2!");

    break

    case 3:

    alert("show 3!");

    //没有break,接续执行case4

    case 4

    alert("show 4");

    break;

    default:

    alert("show others!");

    break;

    }

    例子3:

    switch(num)

    {

    case 1:

    case 2:

    //想到于if(num==1 ||num==2)

    alert("show 1 or 2!");

    break

    case 3:

    case 4

    //想到于if(num==3||num==4)

    alert("show 3 or 4

    break;

    default:

    //相当于else

    alert("show others!");

    break;

    }

    例子4:

    switch(num<=2){

    case true:

    alert(num<=2);

    break;

    case false:

    alert(num>2);

    break;

    }

    小结:

    1.case后面一定要是常量(就是一个不可变的量);

    2.当条件的分支很多时(通常超过六个)使用switch...case的效率将高于多重if_else语句(在汇编层switch...case是查找表,if语句是跳转:);

    3. switch语句只能比较常量,而if语句不限比较类型和内容。可以使用double,float,string或是自定义的类型。

  • 相关阅读:
    工具包分享-常用工具。by-某某
    渗透常用dos命令,http协议及数据提交方式。 hack 某某
    Hello This Cruel World!
    FFT的一个小技巧
    未完成的模板
    进制转换详细讲解
    CodeForces练习计划
    [SDOI2013]随机数生成器-题解
    动态dp模板
    noip2018游记
  • 原文地址:https://www.cnblogs.com/doit8791/p/2591667.html
Copyright © 2020-2023  润新知