Як прямий доступ до властивостей ( localStorage.item
або localStorage['item']
), так і використання функціонального інтерфейсу ( localStorage.getItem('item')
) чудово працюють. Обидва вони є стандартними та сумісними з переглядачами. * Відповідно до специфікації :
Підтримувані імена властивостей об’єкта сховища - це ключі кожної пари ключ / значення, що в даний час присутні у списку, пов’язаному з об’єктом, у тому порядку, коли ключі були останніми додані до області зберігання.
Вони просто поводяться по-різному, коли не знайдено пари ключ / значення із запитаним іменем. Наприклад, якщо ключ 'item'
не існує, var a = localStorage.item;
це призведе до a
існування undefined
, тоді як var a = localStorage.getItem('item');
призведе a
до значення null
. Як ви виявили, undefined
і null
не є взаємозамінними в JavaScript / EcmaScript. :)
EDIT: Як зазначає Крістоф у своїй відповіді , функціональний інтерфейс - це єдиний спосіб надійно зберігати та отримувати значення під ключами, що дорівнюють заданим властивостям localStorage
. (Є шість з них: length
, key
, setItem
, getItem
, removeItem
, і clear
.) Так, наприклад, наступний буде завжди робота:
localStorage.setItem('length', 2);
console.log(localStorage.getItem('length'));
Зверніть увагу , зокрема , що перше твердження не впливатиме на майно localStorage.length
( за винятком , можливо , збільшуючи його , якби не було ключа 'length'
вже localStorage
). У цьому відношенні специфікація здається внутрішньо суперечливою.
Однак наступні, мабуть, не зроблять того, що ви хочете:
localStorage.length = 2;
console.log(localStorage.length);
Цікаво, що перший - це заборона в Chrome, але синонім функціонального виклику у Firefox. Другий завжди реєструє кількість присутніх ключів localStorage
.
* Це справедливо для браузерів, які в першу чергу підтримують веб-сховище. (Сюди входять майже всі сучасні настільні та мобільні браузери.) У середовищах, які імітують локальне зберігання за допомогою файлів cookie або інших методів, поведінка залежить від використовуваної обробки. Кілька polyfills для localStorage
можна знайти тут .
getItem
іsetItem
є стандартизованим способом здійснення речей.