web-dev-qa-db-fra.com

HTML5 LocalStorage: Vérification de l'existence d'une clé

Pourquoi ça ne marche pas?

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

L'objectif est de rediriger l'utilisateur de la page d'index vers la page de connexion s'il n'est pas déjà connecté. Ici, la variable localStorage.getItem("username")) n'est pas définie pour le moment.

C'est pour une application phonegap ios.

116
Gabriel

Citant le spécification :

La méthode getItem (key) doit renvoyer la valeur actuelle associée à la clé donnée. Si la clé donnée n'existe pas dans la liste associée à l'objet, cette méthode doit renvoyer null.

Vous devriez en fait vérifier par rapport à null.

if (localStorage.getItem("username") === null) {
  //...
}
260
UltraInstinct

Cette méthode a fonctionné pour moi:

if ("username" in localStorage) {
    alert('yes');
} else {
    alert('no');
}
32
user3332298

Mise à jour:

if (localStorage.hasOwnProperty("username")) {
    //
}

Une autre façon, pertinente lorsque la valeur ne devrait pas être une chaîne vide, une valeur nulle ou toute autre valeur de fausseté:

if (localStorage["username"]) {
    //
}
16
Derin

Le documentation MDN montre comment la méthode getItem est implémentée:

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

Si la valeur n'est pas définie, il retourne null. Vous testez pour voir si c'est undefined. Vérifiez si c'est null à la place.

if(localStorage.getItem("username") === null){
13
Quentin