Почему localStorage ["... " ] не определено, но localStorage.getItem ("... " ) равно null?

последний раз, когда я проверял, следующие две строки вернулись true:

null == localStorage["foo"];
null == localStorage.getItem("foo");

то же самое применяется при замене null С undefined. Итак, первый вопрос: почему существует два способа обращения к localStorage? И почему

localStorage["foo"]

возвращение undefined пока

localStorage.getItem("foo")

возвращает null?

нужно ли мне заботиться об этом при разработке JS?

3 ответов


на спецификация веб-хранилища требуется это .getItem() возвращает null для неизвестного ключа.

обратите внимание, однако, что .getItem() и .setItem() специально определены в IDL как обозначенные getter и setter на Storage интерфейс, и поэтому они также полностью поддерживаются способы доступа к содержимому хранилища.

на [] синтаксис больше похож на обычный объект и / или свойство массива getter, и как тех, кто возвращает undefined неизвестное имя свойства.

причина не использовать [] синтаксис заключается в том, что он сначала будет работать со свойствами объекта и с радостью позволит вам перезаписать реальные свойства и методы


localStorage["..."] недопустимое использование localstorage. Вы пытаетесь получить доступ к методам localstorage объект, а не доступ к фактической базе данных.

вы должны использовать

localStorage.getItem("...")

и

localStorage.setItem("...")

методы доступа к базе данных хранилища.


в javascript вы всегда получаете undefined значения для ключей, которые не существуют внутри объекта.

a = {}; //new object
alert(a["test"]); // you get 'undefined' because "test" keys is not found

в localStorage .getItem - это метод, который проверяет ключи внутри объекта localStorage и возвращает null если не нашли.

не вините javascript, это просто поведение объекта localStorage