Подтвердить что ты не робот

LocalStorage - использовать функции getItem/setItem или объект доступа напрямую?

Существуют ли какие-либо преимущества использования методов, определенных в объекте localStorage, или напрямую связанных с объектами? Например, вместо:

var x = localStorage.getItem(key);
localStorage.setItem(key, data);

Я делал это:

var x = localStorage[key];
localStorage[key] = data;

С этим что-то не так?

4b9b3361

Ответ 1

Не совсем, они, в основном, точно такие же. Один использует инкапсуляцию (getter/setter) для лучшей защиты данных и для простого использования. Вы должны использовать этот стиль (для обеспечения безопасности).

Другой позволяет лучше использовать, когда имена (ключи) неизвестны, а для массивов и циклов. Используйте .key() и .length чтобы перебирать элементы хранения, не зная их фактических имен ключей.

Я нашел, что это отличный ресурс: http://diveintohtml5.info/storage.html

Этот вопрос мог бы дать более глубокое понимание некоторым: HTML5 localStorage key order

Приложение:

Ясно, что была некоторая путаница в отношении инкапсуляции. Посмотрите эту быструю Википедию. Но серьезно, я надеюсь, что пользователи этого сайта знают, как google.

Двигаясь дальше, инкапсуляция - это идея, что вы делаете небольшие порталы и выходите из них для связи с другой системой. Скажем, вы делаете пакет API для других пользователей. Скажем, у вас есть массив информации в этой системе API, которая обновляется с помощью ввода пользователем. Вы можете заставить пользователей вашего API напрямую помещать эту информацию в массив... используя метод array[key]. ИЛИ вы можете использовать инкапсуляцию. Возьмите код, который добавляет его в массив и обернет его в функцию (скажем, функцию setArray() или setWhateverMakesSense()), которую пользователь вашего API вызывает для добавления этого типа информации. Затем в этой функции set вы можете проверить данные на наличие проблем, вы можете добавить их в массив правильно, в случае, если вам нужно push или shift на массив определенным образом... и т.д. вы контролируете, как вход пользователя переходит в фактическую программу. Таким образом, сам по себе он не добавляет безопасности, но позволяет вам писать безопасность, автор API. Это также позволяет лучше управлять версиями, поскольку пользователям вашего API не придется переписывать код, если вы решите внести внутренние изменения. Но это все равно присуще хорошему ООП.

В данном случае javascript и объект localStorage они уже написали этот API, они являются авторами, и мы являемся его пользователями. Если авторы решают изменить способ работы localStorage, то будет менее вероятно, что вам придется переписать код, если бы были использованы методы инкапсуляции. Но мы все знаем, что маловероятно, что этот уровень изменений когда-либо случится, по крайней мере, не скоро. И поскольку у авторов не было никаких неотъемлемых различных проверок безопасности, чтобы сделать здесь, то, в настоящее время, оба этих способа использования localStorage в основном одинаковы. Это похоже на прокладку. Однако мы можем легко сделать свою собственную инкапсуляцию, чтобы перезаписать/заменить существующую инкапсуляцию вокруг localStorage чтобы сделать наши собственные проверки безопасности.

PT

Ответ 2

Я думаю, что они точно такие же, единственное, что говорится в documenation:

Примечание. Хотя значения могут быть установлены и прочитаны с использованием стандартного Метод доступа к свойствам JavaScript, используя getItem и setItem методы рекомендуются.

Однако, если использовать полную прокладку, он указывает, что:

Использование методов localStorage.yourKey = yourValue; и удалить localStorage.yourKey; для установки или удаления ключа не является безопасным способом с помощью  этот код.

и ограниченная прокладка:

Использование метода localStorage.yourKey для получения, установки или удаления ключ не допускается с помощью этого кода.

Ответ 3

Одно из самых больших преимуществ, которое я вижу, это то, что мне не нужно проверять, есть ли значение undefined или нет, до того, как я его JSON.parse(), поскольку getItem() возвращает NULL, а не undefined.

Ответ 4

Пока вы не используете "точечную нотацию", например window.localStorage.key, вы, вероятно, хорошо, так как она недоступна в Windows Phone 7. Я не тестировал с помощью скобок (ваш второй пример). Лично я всегда использую набор и получаю функции (ваш первый пример).