2013-04-15 27 views
81

Perché questo non funziona?HTML5 LocalStorage: verifica se esiste una chiave

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

L'obiettivo è di reindirizzare l'utente dalla pagina di indice alla pagina di accesso se non è già stato registrato. Qui la variabile localStorage.getItem("username")) non è definita per il momento.

È per un'app di iOS per PhoneGap.

+0

Sono sorpreso nessuno ha detto ancora - la sicurezza lato client è altamente sconsigliato. Si può semplicemente premere F12 ed eseguire 'localStorage ['username'] = 'admin'' e fare casino con il tuo sito web. – oriadam

+1

@oriadam Spero che nessuno stia basando l'autorizzazione sul localStorage, ma è perfettamente in grado di memorizzare l'accessToken JWT nel localStorage. –

risposta

193

Citando dalla specification:

Il metodo getItem (chiave) deve restituire il valore corrente associato alla chiave data. Se la chiave specificata non esiste nell'elenco associato all'oggetto, questo metodo deve restituire null .

Si dovrebbe effettivamente verificare contro null.

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

Grazie, è stato il mio primo errore! ma doesnt' lavoro anche con if (typeof (localStorage.getItem ("username")) === null) { \t \t \t \t \t alert ('no') \t \t \t \t \t}; – Gabriel

+13

Il tipoof di 'null' è' "null" ', non' null' (spero di avere un senso). – georg

+3

@Gabriel: Rimuovi 'typeof (..)'. Controlla di nuovo la mia risposta. – SuperSaiyan

10

Il MDN documentation mostra come il metodo getItem è implementated:

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

Se il valore non è impostato, restituisce null. Stai provando per vedere se è undefined. Controlla se è null invece.

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

Giusto, ho risposto a Thrustmaster sopra. Ma non funziona meglio con questo:/ – Gabriel

+0

Esso [funziona per me] (http://jsbin.com/osujaf/1/edit). – Quentin

+0

@Gabriel - Nel tuo commento sopra stai confrontando il 'typeof' del valore su null. È necessario confrontare il valore reale. – Quentin

19

Questo metodo di lavoro per me:

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

wow watta syntax –

10

Un altro modo è:

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

È breve per 'if (localStorage [" username "] == undefined)' –

+6

Non proprio - è un abbreviazione di 'if (localStorage [" username "] == undefined || localStorage [" username "] == 0 || localStorage ["username"] == null || localStorage ["username"] == false || localStorage ["username"] == '') '@AllanRuin – oriadam