HTML5 localStorage: Comprobar si existe una clave [duplicar]


Esta pregunta ya tiene una respuesta aquí:

¿por Qué esto no funciona ?

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

El objetivo es redirigir al usuario de la página de índice a la página de inicio de sesión si no está registrado. Aquí la variable localStorage.getItem("username")) no está definida por el momento.

Es para una aplicación phonegap ios.

Author: UltraInstinct, 2013-04-15

4 answers

Citando la especificación :

El método getItem(clave) debe devolver el valor actual asociado con la clave dada. Si la clave dada no existe en la lista asociada con el objeto, entonces este método debe devolver null.

Usted debe comprobar realmente contra null.

if (localStorage.getItem("username") === null) {
  //...
}
 223
Author: UltraInstinct,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-15 08:56:50

Este método funciona para mí:

if("username" in localStorage){
    alert('yes');
} else {
   alert('no');
}
 28
Author: user3332298,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-20 10:51:24

La documentación de MDN muestra cómo se implementa el método getItem:

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

Si el valor no está establecido, devuelve null. Usted está probando para ver si es undefined. Compruebe si es null en su lugar.

if(localStorage.getItem("username") === null){
 12
Author: Quentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-15 08:35:24

Actualización:

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

Otra forma, relevante cuando no se espera que el valor sea una cadena vacía, null o cualquier otro valor falso:

if (localStorage["username"]) {
    //
}
 12
Author: Derin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 17:15:59