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

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

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

Я делал это:

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

Что-то не так с этим?

 Matt26 окт. 2012 г., 21:01
@GurpreetSingh, а? Какое это имеет отношение к вопросу
 Gurpreet Singh26 окт. 2012 г., 21:00
localStorage является глобальным, поэтому вы должны кэшировать свойства в локальном var, если вы хотите обращаться к нему несколько раз.
 Rob W12 янв. 2014 г., 22:17
 jbabey26 окт. 2012 г., 20:57
я считаю, что они точно такие же.
 Gurpreet Singh26 окт. 2012 г., 21:07
Извините, я имел в виду, что localStorage является глобальным, поэтому я предполагаю, что предоставляемые функции могут иметь снижение производительности, если вы хотите получить к нему доступ несколько раз.

Ответы на вопрос(4)

Решение Вопроса

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

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

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

Этот вопрос также может помочь некоторым понять:HTML5 localStorage ключевой порядок

Приложение:

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

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

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

PT

 Hugolpz05 июл. 2013 г., 00:47
Что такое «один», что такое «другой»? #readability
 Pimp Trizkit23 авг. 2017 г., 03:55
Я не уверен, что отсутствие этой информации заслуживает отрицательного ответа. Вот. Видя, что это не было запрошено ФП. И, как я уже сказал, ответ ... Не совсем. Нет никаких реальных различий в безопасности этих двух способов JavaScript. Номенклатура отправки всего в функцию (инкапсуляция) позволяет создать портал для этой транзакции. Если бы вы хотели, вы могли бы переписать этот портал ... что-то еще далеко за пределами этого контекста. Но должно быть очевидно, как этот уровень контроля может быть использован для повышения безопасности. Предполагая, что вы знаете инкапсуляцию, это все очевидно.
 Natix22 авг. 2017 г., 12:01
Так как именно делают методылучше защитить данные и улучшитьбезопасность еслиони, в принципе, точно такие же?
 Pimp Trizkit05 июл. 2013 г., 04:23
Как я уже сказал, каждый использует инкапсуляцию (getter / sitter) ... так что это должно быть очевидно ... это функции, которые начинаются с "get" или "set" ... если вы понимаете инкапсуляцию. И другой способ, который использует.key() а также.length повторять.

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

documenation состояния это:

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

Однако при использовании полной прокладки говорится, что:

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

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

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

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

Ваш ответ на вопрос