Sia l'accesso diretto alla proprietà ( localStorage.itemo localStorage['item']) che l'utilizzo dell'interfaccia funzionale ( localStorage.getItem('item')) funzionano bene. Entrambi sono compatibili standard e cross-browser. * Secondo le specifiche :
I nomi di proprietà supportati su un oggetto di archiviazione sono le chiavi di ciascuna coppia chiave / valore attualmente presente nell'elenco associato all'oggetto, nell'ordine in cui le chiavi sono state aggiunte l'ultima volta all'area di archiviazione.
Si comportano in modo diverso quando non viene trovata alcuna coppia chiave / valore con il nome richiesto. Ad esempio, se la chiave 'item'non esiste, var a = localStorage.item;risulterà in aessere undefined, mentre var a = localStorage.getItem('item');risulterà in aavere il valore null. Come hai scoperto undefinede nullnon sono intercambiabili in JavaScript / EcmaScript. :)
EDIT: come sottolinea Christoph nella sua risposta , l'interfaccia funzionale è l'unico modo per archiviare e recuperare in modo affidabile i valori sotto chiavi uguali alle proprietà predefinite di localStorage. (Ci sono sei di questi: length, key, setItem, getItem, removeItem, e clear.) Così, per esempio, il seguente funziona sempre:
localStorage.setItem('length', 2);
console.log(localStorage.getItem('length'));
Si noti in particolare che la prima istruzione non influenzerà la proprietà localStorage.length(tranne forse incrementandola se non c'era 'length'già una chiave localStorage). A questo proposito, le specifiche sembrano essere internamente incoerenti.
Tuttavia, probabilmente quanto segue non farà quello che vuoi:
localStorage.length = 2;
console.log(localStorage.length);
È interessante notare che il primo è un no-op in Chrome, ma è sinonimo di chiamata funzionale in Firefox. Il secondo registrerà sempre il numero di chiavi presentilocalStorage .
* Questo è vero per i browser che supportano l'archiviazione web in primo luogo. (Ciò include praticamente tutti i browser desktop e mobili moderni.) Per ambienti che simulano l'archiviazione locale utilizzando cookie o altre tecniche, il comportamento dipende dallo shim utilizzato. Diversi polyfill per localStoragepossono essere trovati qui .
getItemesetItemsono il modo standardizzato di fare le cose.