怪异的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或是自定义的类型。

posted on 2012-07-14 17:53  时间朋友  阅读(3062)  评论(0编辑  收藏  举报

导航