为什么这个javascript如果条件没有按预期工作?

时间:2012-06-17 17:10:42

标签: javascript

我正在javascript中对日期进行比较。在这种情况下,date1为空"",我可以在firebug中看到相同的内容。根据下面的代码,不应该调用第一个警报,因为date1 == "",但由于某种原因,调用了警报alert(" This is called....");。这有什么不对?

if(date1 != null || date1 != ""){

        if( (date1 != null || date2 != "") && (date1 < date2)){
                alert(" This is called....");
                break;
        }
        else{
            alert(" That is called....");
            break;
        }

    }

上面的if条件在for循环中,因此中断。

5 个答案:

答案 0 :(得分:2)

我认为你的意思是在你的第一次比较中使用&&而不是||来确保这两个条件都是正确的,并且我认为你在使用date1时有错字在第二次测试中代替date2。此外,您可以使用if (date1)同时排除null""以及undefined0以及NaN以及任何其他{{1}价值。

我想你想要这样的东西:

falsey

如果你真正要做的是确保if (date1) { if(date2 && date1 < date2) { alert(" This is called...."); } else { alert(" That is called...."); } break; } date1是合法的号码,那么我建议你这样做:

date2

或者,如果它们应该是Date对象,那么你可以测试它:

if (typeof date1 == "number") {
    if(typeof date2 == "number" && date1 < date2) {
        alert(" This is called....");
    } else {
        alert(" That is called....");
    }
    break;
}

答案 1 :(得分:1)

对我而言看起来是正确的。由于OR(||),此语句的计算结果为true,因为date1不为null:

if(date1 != null || date1 != ""){

(它简化为if (true || false) {,这始终是真的。

并且以下语句的计算结果为true,因为“”不等于null,并且可能是date1小于date2:

if( (date1 != null || date2 != "") && (date1 < date2)){

答案 2 :(得分:0)

  

date1为空""

看看这个条件:

date1 != null || date1 != ""

date1 != null,第二项(date1 != "")甚至没有被评估,因为第一项通过 - 并且整个表达式的计算结果为{ {1}}。

此外这个条件:

true

也符合(见上文) - 这次你的意思是date1 != null || date2 != "" 吗?不过,您的date2 != null会显示出来。在这种情况下,BTW This is called毫无意义。

最后你可以考虑一下:

break

不等于1:1,但非常接近。

答案 3 :(得分:0)

我想建议你这个语法

if(  (x==5) || (x==6)  || (x==7) || (x==8) )

这是使用ORJavaScript检查JQuery条件的最佳答案。

答案 4 :(得分:-1)

也许这是您应该考虑代码可读性的情况。以下是我对您的代码的解释:

if(!isBlank(date1){
    if(dateXIsSmallerThanDateY(date1, date2))
        alert(" This is called....");
    else
        alert(" That is called....");
}

function isBlank(date) {
    return date != null || date != "";
}

function dateXIsSmallerThanDateY(x,y) {
     return (x != null || y != "") && (x < y);
}

你看到dateXIsSmallerThanDateY有问题吗?我能看到一个。那是什么意思:x != null || y != ""?可能它应该是y != null || y != "",而!isBlank(y)可以缩短为function isNotBlank(date) { return date == null && date == ""; }

此外,isBlank函数不会检查空白。看看它的作用:如果为null,或者为空字符串,则认为您的日期为空白。好吧,也许这很难读,所以反过来这个方法:

function isNotBlank(date) {
    return date != null && date != "";
}

正面比较更容易阅读。你看到这里发生了什么吗?日期可以为空并且“”在同一时间吗?没有?好。比我猜你知道该怎么做:

function isBlank(date) {
    return date == null || date == "";
}

或反过来:

{{1}}