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 ループ内にあるため、ブレークします。

4

5 に答える 5

2

&&最初の比較の代わりに使用||して、両方の条件が真であることを確認するつもりだと思います.2番目のテストのdate1代わりに使用している場所にタイプミスがあると思います. date2さらに、and and and and and and and and and and and 他の値if (date1)を同時に除外するために使用できます。 null""undefined0NaNfalsey

私はあなたがこのようなものが欲しいと思います:

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

あなたが本当にしようとしているのは、date1date2が正当な数であることを確認することである場合は、次のようにすることをお勧めします。

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

この構文を提案したい

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

これは、 とORを使用して状態を確認するための最良の答えです。JavaScriptJQuery

于 2015-09-10T06:54:48.827 に答える
1

私には正しいように見えます。このステートメントは、OR (||) により true と評価されます。これは、date1 が null ではないためです。

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

if (true || false) {(どちらが常に真であるかを単純化します。

また、次のステートメントも true と評価されます。これは、"" が null と等しくなく、おそらく date1 が date2 よりも小さいためです。

if( (date1 != null || date2 != "") && (date1 < date2)){
于 2012-06-17T17:14:21.873 に答える
0

日付1は空です""

この状態を見てください:

date1 != null || date1 != ""

date1 つまり != null、2 番目の項 ( date1 != "") は、最初の項が合格し、式全体が に評価されるため、評価さえされませんtrue

さらにこの条件:

date1 != null || date2 != ""

も満たされています(上記を参照)-date2 != null今回のことですか?それにもかかわらず、あなたThis is calledは表示されます。ところでbreak、この文脈では意味がありません。

最後に、次のことを簡単に検討できます。

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 に問題がありますか? 1つ見えます。それはどういう意味ですか: x != null || y != ""? おそらくそれは と読むべきですがy != null || y != ""、これは に短縮できます!isBlank(y)

さらに、isBlank 関数は空白であることをチェックしません。それが何をするか見てください: null でないか空の文字列でない場合、日付は空白であると考えます。わかりにくいかもしれませんが、この方法を逆にします。

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

肯定的な比較は読みやすいです。ここで何が起こっているか分かりますか?日付を null にして "" AT THE SAME TIME にすることはできますか? いいえ?良い。あなたが何をすべきか知っていると思いますより:

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

または逆に:

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