0

私は次のコードを持っています:

var a=sessionStorage.getItem("Token");  
alert(a==null);

戻り値はnullalert(a)表示されている場合null)です。問題は、alert(a==null)Firefoxでは表示がTRUEで、サファリとクロームではFALSEであるということです。WTH?a===null私は!aと同じ結果で試しました。

私は何を間違っているのですか、それとも私は何に気づいていませんか?

助けてくれてありがとう。

4

3 に答える 3

7

あなたはコメントで言った:「私はトークンを設定しました sessionStorage.setItem("Token",null);

問題は、文字列を格納するためにセッションストレージを使用することになっていることだと思います。渡すnullsetItem()、文字列に変換されます"null"。次に、それを取得すると、もちろん実際の値と等しくないgetItem()この文字列が返されます。"null"null

この動作はここで確認できます:http://jsfiddle.net/CWVww/1/

以前に設定したアイテムを削除する場合は、次のようにします。

sessionStorage.removeItem("Token");

...そしての呼び出しは。.getItem("Token")を返しnullます。

Firefoxの動作が異なる理由はわかりません。セッションストレージのMDNページから:「このページで説明されているストレージのいずれかに保存するものはすべて、保存する前に.toStringメソッドを使用して文字列に変換されることに注意してください。」

于 2012-07-15T05:47:26.350 に答える
1

あなたのコードは私と完璧に連携しました(Chromeでテスト済み)。ただし、!演​​算子を使用し、現在の値のタイプも確認することをお勧めします。

var a = sessionStorage.getItem("Token");
if(!a && typeof a!=='string'){        //a doesn't exist
    //Do something
}else{        //a does exist
    //Do something
}

演算子は、 isまたは。のいずれかに!戻ります。trueanullundefined

于 2012-07-15T03:16:45.320 に答える
0

あなたは試すことができString(a) == "null"ます。ただし、Tokenアイテムの値が"null"(文字列"null")に設定されている場合、コードは期待どおりに機能しないため、別の条件を追加する必要があります。

var a = sessionStorage.getItem("Token");
if(String(a)==="null" && typeof a!=="string"){        //a doesn't exist
    //Do something
}else{        //a does exist
    //Do something
}

このように、の「文字列化された」値がであり、変数のタイプがそうでない場合、条件はtrueをa返し"null"ますastring

于 2012-07-15T03:15:45.067 に答える