2

我正在比较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 循环内,因此是 break。

4

5 回答 5

2

我认为您的意思是在第一次比较中使用&&而不是||确保两个条件都为真,并且我认为您在使用date1而不是date2在第二次测试中存在拼写错误。此外,您可以使用if (date1)来同时排除nulland ""and undefinedand and 0and NaNand 任何其他falsey值。

我想你想要这样的东西:

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

如果您真正想做的是确保date1并且date2是合法数字,那么我建议您这样做:

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

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

if (date1 instanceof Date) {
    if(date2 instanceof Date && date1 < date2) {
        alert(" This is called....");
    } else {
        alert(" That is called....");
    }
    break;
}
于 2012-06-17T17:32:51.477 回答
1

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

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

(它简化了if (true || false) {哪一个总是正确的。

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

if( (date1 != null || date2 != "") && (date1 < date2)){
于 2012-06-17T17:14:21.873 回答
1

我想建议你这个语法

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

这是使用and检查OR条件的最佳答案。JavaScriptJQuery

于 2015-09-10T06:54:48.827 回答
0

date1 为空""

看看这个条件:

date1 != null || date1 != ""

date1 就是 != null,第二项 ( date1 != "") 甚至没有被计算,因为第一个通过了 - 并且整个表达式的计算结果为true

此外,这种情况:

date1 != null || date2 != ""

也遇到了(见上文)-您是说date2 != null这次吗?不过你This is called的显示。BTWbreak在这种情况下没有任何意义。

最后,您可以简单地考虑:

if(date1) {

不是 1:1 等价物,但非常接近。

于 2012-06-17T17:27:08.410 回答
-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).

此外,isBlank 函数不检查beeing 空白。看看它做了什么:如果它不为空或不是空字符串,它认为你的日期是空白的。好的,也许这很难阅读,所以颠倒这个方法:

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

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

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

或者反过来:

function isBlank(date) {
    return date == null || date == "";
}
于 2012-06-17T17:48:22.470 回答