Я сильно подозреваю, что основная проблема заключается в том, что вы предоставляете строки в качестве аргументов validateDateFormat
. Если это так, то при использовании if
поведение может определенно отличаться от поведения при использовании switch
. Например, предположим, что вы должны были написать это:
var num = "9";
if (num == 9)
alert("true");
Это предупредит true
, потому что ==
(double-equals) запускает приведение строки в num
к числу перед выполнением сравнения. Однако это ничего не предупредит:
var num = "9";
switch(num) {
case 9:
alert("true");
break;
}
... потому что switch
использует более строгий оператор ===
(triple-equals), который не выполняет приведение типов.
Это, однако, предупреждает true
:
var num = "9";
switch(num) {
case "9": // string
alert("true");
break;
}
... потому что мы сейчас сравниваем строки.
Итак, чтобы исправить ваш код, вам нужно либо передать действительные числа, либо изменить функцию для сравнения строк.
Примечание: Поведение switch
описано в разделе 12.11 спецификации ECMAScript .