Объект localStorage является глобальным объектом служит хранилищем данных. Разные браузеры предоставляют от 5 до 10 Мб под хранение данных (напомню, что куки могут содержать не более 4 кб). Вы можете записать в хранилище данные и управлять ими. Данные записываются в формате "ключ-значение".
Методы для работы с хранилищем.
Количество ключей можно узнать через свойство length.
console.log(localStorage.length);
Все современные браузеры поддерживают локальное хранилище. Но вы дополнительно можете устроить небольшую проверку.
if(window["localStorage"]) {
// поддерживает, можно писать свой код
}
Запишем данные.
localStorage.setItem('name', 'Барсик');
localStorage.setItem('name2', 'Васька');
Можно считать все данные из локального хранилища.
console.log(localStorage);
Но скорее всего, вы будете считывать конкретные ключи.
console.log(localStorage.getItem('name'));
Существуют альтернативные варианты.
console.log(localStorage['name']); // через массив
console.log(localStorage.name2); // через свойство
Если данные больше не нужны, можно удалить их по ключу.
localStorage.removeItem('name');
Если нужно полностью очистить хранилище, тогда вызывайте метод clear:
localStorage.clear();
Все ключи уникальны. Если вы будете вызывать метод setItem() несколько раз, используя один ключ, то данные будут перезаписываться и в итоге в ключе останется последняя запись.
Ключи и значения нужно записывать в строковых значениях. Если вам нужны числа, то используйте методы parseInt(), parseFloat() и т.д.
Сохраним число в виде строки. Затем преобразуем строку в число, увеличим на единицу и сохраним новое значение в том же ключе.
localStorage.setItem("numItem", "4");
var numItem = parseInt(localStorage.getItem("numItem"));
numItem++;
localStorage.setItem("numItem", numItem);
Метод key() бывает полезен при работе с массивами. Но можно получить и отдельный ключ.
localStorage.key(2);
Сохранять можно не только простую строку, но и объекты или массивы при помощи JSON.stringify().
//создадим объект
var cat = {
age: 5,
item2: [123, "two", 3.0],
name:"Barsik"
};
var serialObj = JSON.stringify(cat); //сериализуем объект
localStorage.setItem("catKey", serialObj); //запишем в хранилище
var returnObj = JSON.parse(localStorage.getItem("catKey")); //спарсим обратно объект
Если вы превысите свой лимит, то разные браузеры по-разному поведут себя. Браузер может спросить у вас, хотите ли вы увеличить объём хранилища или сгенерировать исключение QUOTA_EXCEEDED_ERR, которое можно перехватить.
try {
localStorage.setItem(myKey, myValue);
} catch(e) {
if(e == QUOTA_EXCEEDED_ERR) {
alert("Out of storage!");
}
}
У каждого домена своё хранилище данных и нельзя просматривать содержимое хранилище другого домена.