之前用来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或是自定义的类型。