Zarówno bezpośredni dostęp do właściwości ( localStorage.itemlub localStorage['item']), jak i użycie interfejsu funkcjonalnego ( localStorage.getItem('item')) działają dobrze. Oba są standardowe i kompatybilne z różnymi przeglądarkami. * Zgodnie ze specyfikacją :
Obsługiwane nazwy właściwości w obiekcie Storage to klucze każdej pary klucz / wartość aktualnie znajdującej się na liście skojarzonej z obiektem, w kolejności, w jakiej klucze zostały ostatnio dodane do obszaru przechowywania.
Po prostu zachowują się inaczej, gdy żadna para klucz / wartość nie zostanie znaleziona z żądaną nazwą. Na przykład, jeśli klucz 'item'nie istnieje, var a = localStorage.item;spowoduje to aistnienie undefined, a while var a = localStorage.getItem('item');będzie skutkować aposiadaniem wartości null. Jak odkryłeś , undefinedi nullnie są wymienne w JavaScript / EcmaScript. :)
EDYCJA: Jak wskazuje Christoph w swojej odpowiedzi , interfejs funkcjonalny jest jedynym sposobem niezawodnego przechowywania i pobierania wartości pod kluczami równymi wstępnie zdefiniowanym właściwościom localStorage. (Istnieje sześć z nich: length, key, setItem, getItem, removeItem, i clear.) Tak więc, na przykład, co następuje zawsze będzie działać:
localStorage.setItem('length', 2);
console.log(localStorage.getItem('length'));
Zwróć uwagę w szczególności, że pierwsza instrukcja nie wpłynie na właściwość localStorage.length(z wyjątkiem być może jej zwiększenia, jeśli nie ma 'length'już klucza localStorage). Pod tym względem specyfikacja wydaje się być wewnętrznie niespójna.
Jednak następujące elementy prawdopodobnie nie zrobią tego, co chcesz:
localStorage.length = 2;
console.log(localStorage.length);
Co ciekawe, pierwszy nie działa w Chrome, ale jest synonimem wywołania funkcjonalnego w Firefoksie. Drugi zawsze rejestruje liczbę obecnych kluczy localStorage.
* Dotyczy to przede wszystkim przeglądarek obsługujących przechowywanie danych w Internecie. (Dotyczy to prawie wszystkich nowoczesnych przeglądarek na komputery stacjonarne i urządzenia mobilne). W przypadku środowisk symulujących przechowywanie lokalne przy użyciu plików cookie lub innych technik zachowanie zależy od zastosowanej podkładki. Kilka polyfillów localStoragemożna znaleźć tutaj .
getItemisetItemsą znormalizowanym sposobem działania.