2013-04-15 11 views
81

Dlaczego to nie działa?HTML5 LocalStorage: Sprawdzanie, czy klucz istnieje

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

Celem jest przekierowanie użytkownika ze strony indeksu na stronę logowania, jeśli jeszcze nie jest zalogowany. Tutaj zmienna localStorage.getItem("username")) nie jest zdefiniowana na razie.

Jest to aplikacja dla systemu phonegap.

+0

Dziwię się, że nikt nie powiedział jeszcze - bezpieczeństwo po stronie klienta jest wysoce zalecane. Można po prostu nacisnąć F12 i uruchomić 'localStorage ['username'] = 'admin'', a następnie zepsuć swoją witrynę. – oriadam

+1

@oriadam Mam nadzieję, że nikt nie opiera się na autoryzacji na localStorage, ale jest idealnie dobrze przechowywać JTT accessToken w localStorage. –

Odpowiedz

193

Cytowanie z specification:

GetItem sposób

(przycisk) musi zwracać bieżącej wartości związanej z danym przyciskiem. Jeśli podany klucz nie istnieje na liście skojarzonej z obiektem, ta metoda musi zwrócić wartość zerową .

Powinieneś sprawdzić w stosunku do null.

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

Dzięki, to był mój pierwszy błąd! Ale to nie robi”zbyt pracę z if (typeof (localStorage.getItem ("nazwa")) === null) { \t \t \t \t \t alert ('nie') \t \t \t \t \t}; – Gabriel

+13

Typeof 'null' to' "null" ', a nie' null' (mam nadzieję, że mam sens). – georg

+3

@Gabriel: Usuń 'typeof (..)'. Sprawdź ponownie moją odpowiedź. – SuperSaiyan

10

MDN documentation pokazuje, w jaki sposób getItem jest implementated:

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

Jeśli wartość nie jest ustawiona, to zwraca null. Testujesz, aby sprawdzić, czy jest to undefined. Sprawdź, czy zamiast tego jest to null.

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

Dobrze, odpowiedziałem do Thrustmaster powyżej. Ale to nie działa lepiej z tym:/ – Gabriel

+0

It [działa dla mnie] (http://jsbin.com/osujaf/1/edit). – Quentin

+0

@Gabriel - W powyższym komentarzu porównujesz 'typeof' wartość do null. Musisz porównać rzeczywistą wartość. – Quentin

19

Praca ta metoda dla mnie:

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

wow watta Składnia –

10

Innym sposobem jest:

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

To skrót od 'if (localStorage [" username "] == undefined)' –

+6

Niezupełnie - to skrót od 'if (localStorage [" username "] == undefined || localStorage [" username "] == 0 || localStorage ["username"] == null || localStorage ["username"] == false || localStorage ["username"] == '') '@AllanRuin – oriadam