我正在编写一个简单的函数来验证日期。问题是,似乎switch操作符与任何内容都不匹配,maxDay
的值仍为0.如果我使用if
语句,我没有任何问题。
function validateDateFormat(day,month,year) {
alert(month); // this was to ensure month was correct and it is!!
var maxDay = 0;
switch(month)
{
case 01 :
case 03 :
case 05 :
case 07 :
case 08 :
case 10 :
case 12 : maxDay = 31; break;
case 04 :
case 06 :
case 09 :
case 11 : maxDay = 30; break;
case 02 : if(year%4 == 0) maxDay = 29;
else maxDay = 28;
break;
//default : return " Invalid month -"; break;
}
alert(maxDay);
if(day > maxDay) {return " Invalid day -";}
return "";
}
答案 0 :(得分:2)
我强烈怀疑根本问题是你提供字符串作为validateDateFormat
的参数。如果是这样,那么使用if
时的行为肯定会与使用switch
时的行为不同。例如,假设您要写这个:
var num = "9";
if (num == 9)
alert("true");
这将提醒true
,因为==
(双等号)会在执行比较之前触发num
中字符串强制转换为数字。但是,这不会提醒任何事情:
var num = "9";
switch(num) {
case 9:
alert("true");
break;
}
...因为switch
使用更严格的===
(三等号)运算符,它不执行类型强制。
然而,这会提醒true
:
var num = "9";
switch(num) {
case "9": // string
alert("true");
break;
}
...因为我们现在正在比较字符串。
因此,要修复代码,您需要传递实际数字,或修改函数以比较字符串。
注意: section 12.11 of the ECMAScript spec涵盖switch
行为。
答案 1 :(得分:0)
您不应在0
之前添加数字前缀;这会导致数字文字被解释为八进制。由于08
不是有效的八进制数,因此您的脚本可能会生成运行时错误。