2013-04-15 13 views
81

これはなぜ機能しないのですか?HTML5 LocalStorage:キーが存在するかどうかの確認

if(typeof(localStorage.getItem("username"))=='undefined'){ 
    alert('no'); 
}; 

目標は、ログインしていない場合は、インデックスページからログインページにユーザーをリダイレクトすることです。 ここではlocalStorage.getItem("username"))変数が定義されていません。

これはios phonegapアプリ向けです。 MDN documentation

+0

私は誰もまだそれを言っていない驚いている - クライアント側のセキュリティが非常に落胆です。あなたは単にF12を押して 'localStorage ['username'] = 'admin''を実行して、あなたのウェブサイトを混乱させることができます。 – oriadam

+1

@oriadam私は誰もlocalStorageの認可を受けていないことを願っていますが、JWT accessTokenをlocalStorageに格納しても問題ありません。 –

答えて

193

specificationから引用:

のgetItem(key)メソッドは、指定されたキーに関連付けられている現在の値を返さなければなりません。指定されたキーがオブジェクトに関連付けられたリストに存在しない場合、このメソッドはnullを返す必要があります

nullを実際にチェックする必要があります。私にとって

if (localStorage.getItem("username") === null) { 
    //... 
} 
+2

ありがとう、それは私の最初の間違いでした! しかし、それは」で、あまりにも仕事をするif(typeof演算(localStorage.getItem( "ユーザ名"))=== NULL){ \t \t \t \t \t警告doesntの( 'いいえ') \t \t \t \t \t}; – Gabriel

+13

''ヌル 'の型は ''ヌル ''ではなく、 ''ヌル ''です。 – georg

+3

@Gabriel: 'typeof(..)'を削除します。私の答えをもう一度チェックしてください。 – SuperSaiyan

10

getItem方法がimplementatedされる方法を示しています。値が設定されていない

Object.defineProperty(oStorage, "getItem", { 
     value: function (sKey) { return sKey ? this[sKey] : null; }, 
     writable: false, 
     configurable: false, 
     enumerable: false 
    }); 

場合、それはnullを返します。あなたはundefinedかどうかをテストしています。代わりにnullかどうか確認してください。

if(localStorage.getItem("username") === null){ 
+0

私は上記のスラストマスターに答えました。しかし、これでうまく動作しません:/ – Gabriel

+0

それは[私のために働く](http://jsbin.com/osujaf/1/edit)。 – Quentin

+0

@Gabriel - 上記のあなたのコメントでは、値の型をヌルと比較しています。あなたは実際の値を比較する必要があります。 – Quentin

19

このメソッドの仕事:

if("username" in localStorage){ 
    alert('yes'); 
} else { 
    alert('no'); 
} 
+0

wow wattaの構文 –

10

もう一つの方法は次のとおりです。

if (localStorage["username"]) { 
    // 
} 
+1

これは 'if(localStorage [" username "] == undefined)' –

+6

の略です。これは 'if(localStorage [" username "] == undefined || localStorage [" username "]の略です。 == 0 || localStorage ["username"] == null || localStorage ["username"] == false || localStorage ["username"] == '') '@AllanRuin – oriadam