Tanto el acceso directo a la propiedad ( localStorage.itemo localStorage['item']) como el uso de la interfaz funcional ( localStorage.getItem('item')) funcionan bien. Ambos son estándar y compatibles con varios navegadores. * Según la especificación :
Los nombres de propiedad admitidos en un objeto de almacenamiento son las claves de cada par clave / valor actualmente presente en la lista asociada con el objeto, en el orden en que las claves se agregaron por última vez al área de almacenamiento.
Simplemente se comportan de manera diferente cuando no se encuentra un par clave / valor con el nombre solicitado. Por ejemplo, si la clave 'item'no existe, var a = localStorage.item;resultará en aser undefined, mientras var a = localStorage.getItem('item');que resultará en atener el valor null. Como usted ha descubierto, undefinedy nullno son intercambiables en JavaScript / EcmaScript. :)
EDITAR: Como Christoph señala en su respuesta , la interfaz funcional es la única forma de almacenar y recuperar de manera confiable valores bajo claves iguales a las propiedades predefinidas de localStorage. (Hay seis de ellos: length, key, setItem, getItem, removeItem, y clear.) Así, por ejemplo, lo siguiente será siempre el trabajo:
localStorage.setItem('length', 2);
console.log(localStorage.getItem('length'));
Nota en particular que la primera declaración no afectará a la propiedad localStorage.length(excepto, quizás, incrementándolo si no había llave 'length'ya localStorage). En este sentido, la especificación parece ser internamente inconsistente.
Sin embargo, lo siguiente probablemente no hará lo que desea:
localStorage.length = 2;
console.log(localStorage.length);
Curiosamente, el primero es un no-op en Chrome, pero es sinónimo de la llamada funcional en Firefox. El segundo siempre registrará el número de claves presentes localStorage.
* Esto es cierto para los navegadores que admiten el almacenamiento web en primer lugar. (Esto incluye prácticamente todos los navegadores de escritorio y móviles modernos). Para entornos que simulan el almacenamiento local mediante cookies u otras técnicas, el comportamiento depende de la corrección que se utilice. AquílocalStorage se pueden encontrar varios polyfills para .
getItemysetItemson la forma estandarizada de hacer las cosas.