Javascript 使用switch命令进行日期验证无效
我正在编写一个简单的函数来验证日期。问题在于开关运算符似乎与任何内容都不匹配,Javascript 使用switch命令进行日期验证无效,javascript,switch-statement,Javascript,Switch Statement,我正在编写一个简单的函数来验证日期。问题在于开关运算符似乎与任何内容都不匹配,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 :
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
;这将导致数字文字被解释为八进制。由于08
不是有效的八进制数,您的脚本可能会生成运行时错误。我强烈怀疑根本问题是您提供了字符串作为validateDateFormat
的参数。如果是这样,那么使用If
时的行为肯定会与使用开关时的行为有所不同。例如,假设您要编写以下内容:
var num = "9";
if (num == 9)
alert("true");
这将提醒true
,因为=
(双等于)会在执行比较之前触发将num
中的字符串强制为一个数字。但是,这不会提醒任何人:
var num = "9";
switch(num) {
case 9:
alert("true");
break;
}
…因为开关
使用更严格的=
(三重相等)运算符,它不执行类型强制
但是,这确实会提醒true
:
var num = "9";
switch(num) {
case "9": // string
alert("true");
break;
}
…因为我们现在正在比较字符串
因此,要修复代码,您需要传递实际数字,或者修改函数以比较字符串
注意:中介绍了开关的行为。闰年实际上不是每4年发生一次。考虑到应用程序的生命周期和验证日期,这可能并不重要。我想你可能想知道它们是以400年为周期工作的,所以闰年之间偶尔会有8年的间隔。看,我在《火虫》中的表现不错。你试过了吗?这不是问题,它似乎对我有用。因为这不是为你准备的,我想你可能使用的浏览器不太容易处理JS的语法错误,或者你传递给函数的内容不同。你应该把它添加到你的帖子中。我猜这就是问题所在。我猜函数实际上正在接收StringsHanks,我刚刚意识到这一点。我以字符串而不是整数值的形式输入。非常感谢,初学者的错误我想。。。哦,不过我是。Thanks@PatrickBouche如果答案满足你的问题,你应该接受