Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用switch命令进行日期验证无效_Javascript_Switch Statement - Fatal编程技术网

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如果答案满足你的问题,你应该接受