2013-09-05 4 views
4

Я использую LocalStorage и вопрос пришел ко мне:Преимущества метода localstorage HTML5?

Который преимущество использования setItem и getItem методы, а не:

 
SET ITEM : localStorage.myKey = "myValue"; 
GET ITEM : localStorgae.myKey --> returns "myValue" 

они просто вспомогательные методы тогда? Хорошая практика?

Просто спасибо за любопытство.

+1

'Устанавливаемое: местная ...', что JavaScript? – Stijn

+0

Ну, если вы хотите сохранить значение с ключом 'length', вам придется использовать' localStorage.setItem («length», val) ', потому что' localStorage.length = val' не будет работать. Такая же проблема, если вам нужно получить значение с буквенным ключом 'setItem' или' getItem'. – apsillers

+0

Возможный дубликат [localStorage - использовать функции getItem/setItem или объект доступа напрямую?] (http://stackoverflow.com/questions/13092715/localstorage-use-getitem-setitem-functions-or-access-object-directly) – apsillers

ответ

5

HTML5 Хранение основано на именованных парах ключ/значение. Вы сохраняете данные на основе именованного ключа, затем вы можете получить эти данные с помощью того же ключа. Именованный ключ - это строка. Данные могут быть любыми типами, поддерживаемыми JavaScript, включая строки, булевы, целые числа или поплавки. Однако данные фактически хранятся в виде строки. Если вы храните и извлекаете что-либо, кроме строк, вам нужно будет использовать такие функции, как parseInt() или parseFloat(), чтобы принудить ваши извлеченные данные к ожидаемому типу данных JavaScript.

interface Storage { 
    getter any getItem(in DOMString key); 
    setter creator void setItem(in DOMString key, in any data); 
}; 

Вызов SetItem() с именем ключа, который уже существует молча перезаписать предыдущее значение. Вызов getItem() с несуществующим ключом возвращает null, а не исключает исключение.

Как и другие объекты JavaScript, вы можете рассматривать объект localStorage как ассоциативный массив. Вместо использования методов getItem() и setItem() вы можете просто использовать квадратные скобки. Например, этот фрагмент кода:

var foo = localStorage.getItem("bar"); 
// ... 
localStorage.setItem("bar", foo); 

... может быть переписан с использованием синтаксиса квадратных скобок вместо:

var foo = localStorage["bar"]; 
// ... 
localStorage["bar"] = foo; 

Может быть, эту надежду. : D

Ссылка: http://diveintohtml5.info/storage.html

+1

Доступ к несуществующему ключу хранения (или любому объекту) с прямым значением- доступ с возвратом 'undefined' вместо' null', но он не будет генерировать исключение. – apsillers

+0

Привет @ PabloWeb18 да, это помогает, уточняя данные перед тем, как положить, получить или другие операции ... спасибо! –

1

set/getItem лучше, чем свойства-доступ по следующим причинам:

  1. localStorage принуждает все входные данные в строки, но вы можете перезаписать set/getItem методы для сериализации и десериализации для поддержки типов, отличных от строк:

    var basicSetItem = localStorage.setItem; 
    localStorage.setItem = function(key, val) { 
        basicSetItem.call(localStorage, key, JSON.stringify(val)); 
    } 
    
    var basicGetItem = localStorage.getItem; 
    localStorage.getItem = function(key) { 
        return JSON.parse(basicGetItem.call(localStorage, key)); 
    } 
    

    Вы не можете добиться эквивалентного эффекта для всех значений свойств хранилища с помощью API-интерфейсов ECMAScript 5.

  2. Вы не можете установить хранения ключа length, и вы не можете получить доступ ключей getItem, setItem или removeItem без доступа функции:

    localStoage.length = "foo";   // does not work 
    localStoage.setItem("length", "foo"); // works 
    
    var bar = localStoage.setItem;    // gets the `setItem` function 
    var bar = localStorage.getItem("setItem"); // gets the value stored in the `setItem` key