0
if (authorID) {
    console.log(authorID);
    $.ajax({
    -ajax stuff-
    )}
} else window.location.href="notLoggedIn.html";

わかりましたこれは私の問題です:コンソールauthorID(文字列)では出力され、.として出力されます. 私の質問は:なぜこれが起こるのですか?authorID が null であるため、実行されたものは else ブロックであってはなりませんか?null

私は Javascript/jQuery に本当に慣れていないので、明らかなことを見逃しているだけかもしれませんが、自分で理解できませんでした。

編集: authorID の作成方法は次のとおりです。

if (session.getAttribute("authorID")!= null) {
    authorID = session.getAttribute("authorID").toString();
} 

ログインせずにテストしているので、session.getAttribute()がnullを返すことを期待しています

4

4 に答える 4

2

JavaScript は非常に柔軟な言語です。「真実の」価値観に混乱するのはとても簡単です。

null と false は、これらの真実のよくある間違いに属します。

メソッドの実行前のどこかで、null 値が文字列に変換されました。たぶん、DOM から値を取得する場合。

そのため、デバッグ時に出力に「null」が書き込まれます。しかし実際には、null の生の値ではなく文字列として「null」があります。

JavaScript の場合、これは true と評価されます。

if("null"){

}

これを排除する唯一の方法は、typeof を使用してデータ型をチェックし、正しい値に対してチェックすることです。

if(a !== null && a !== "null"){

}
于 2013-07-04T17:22:12.180 に答える
1

問題は、文字列が常に true と評価されることです。あなたはauthorID文字列だと言いました。したがって、if (authorID)常に true と評価されます。

できることは、「authorID」文字列が「null」と等しくないかどうかをテストすることです。

if (authorID !== 'null')

「authorId」が文字列「null」に等しい場合にのみページのリダイレクトが発生するようにしたいので、コードは次のようになります。

if (authorID !== 'null') {
    console.log(authorID);
    $.ajax({
    // -ajax stuff-
    )}
} else {
    window.location.href = "notLoggedIn.html";
}

または、質問を編集して「 authorID」がどのように定義されているかを示しました。

そのブロックを次のように変更します。

if (session.getAttribute("authorID")) {
    authorID = session.getAttribute("authorID").toString();
} else {
    authorID = null;
}

次に、元の条件を使用できます。

if (authorID) {
    console.log(authorID);
    $.ajax({
    // -ajax stuff-
    )}
} else {
    window.location.href = "notLoggedIn.html";
}
于 2013-07-04T17:12:56.920 に答える
0

以下を読むことをお勧めします: http://saladwithsteve.com/2008/02/javascript-undefined-vs-null.html

あなたの場合、その記事の最後に、あなたが犯した間違いが示されています。

if (foo == null) {
       foo = "Joe";
    }

次と等しい:

if (!foo) {
       foo = "Joe";
    }

私は簡単な jsfiddle を作成しました

于 2013-07-04T17:21:16.987 に答える
-1

if 条件を渡すには、authorID をブール変数として初期化する必要があります。

var authorID=true;

if (authorID)
{
  //code if true
}
else
{
 //code if false
}

あなたのコードでは、以下のようにすることができます

if (authorID!=null)
{
 //code if not null
}
else
{
 //code if null
}
于 2013-07-04T17:13:04.610 に答える