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