Почему 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
