20.1. Объекты localStorage и sessionStorage

Броузеры, реализующие положения проекта спецификации «Web Storage», определяют в объекте Window два свойства: localStorage и sessionStorage. Оба свойства ссылаются на объект Storage - постоянно хранимый ассоциативный массив, отображающий строковые ключи в строковые значения. Объекты Storage действуют подобно обычным объектам в языке JavaScript: достаточно просто присвоить свойству объекта строку, и броузер автоматически сохранит ее. Разница между localStorage и sessionStorage заключается лишь в сроке хранения и области видимости: они определяют, как долго будут храниться данные и кому они будут доступны.

Ниже мы подробнее поговорим о сроке хранения и области видимости. А пока рассмотрим несколько примеров. Следующий фрагмент использует свойство localStorage, но он точно так же мог бы работать и со свойством sessionStorage:

var name = localStorage.username; // Получить сохраненное значение.

name = localStorage["username"]; // Эквивалентная форма обращения, как к массиву

if (!name) {

  name = prompt("Как вас зовут?"); // Задать пользователю вопрос.

  localStorage.username = name; // Сохранить ответ.

}

// Выполнить итерации по всем хранящимся парам имя/значение

for(var name in localStorage) { // Итерации по всем хранящимся именам

  var value = localStorage[name]; // Получить значение для каждого из них

}

Объекты Storage также определяют методы для сохранения, извлечения и удаления данных. Эти методы рассматриваются в разделе 20.1.2.

Проект спецификации «Web Storage» определяет возможность сохранения структурированных данных (объектов и массивов), а также простых значений и данных встроенных типов, таких как даты, регулярные выражения и даже объекты File. Однако на момент написания этих строк броузеры позволяли сохранять только строки. Если потребуется сохранять и извлекать данные других типов, их можно кодировать и декодировать вручную. Например:

// При сохранении числа оно автоматически преобразуется в строку.

// Не забудьте выполнить обратное преобразование при извлечении из хранилища.

localStorage.х = 10;

var х = parseInt(localStorage.х);

// Преобразовать объект Date в строку при записи и обратно - при чтении

localStorage.lastRead = (new Date()).toUTCString();

var lastRead = new Date(Date.parse(localStorage.lastRead));

// Для кодирования любых простых или структурированных данных удобно

// использовать формат JS0N

localStorage.data = JSON.stringify(data); // Закодировать и сохранить

var data = JSON.parse(localStorage.data); // Извлечь и декодировать.