JavaScript метод Storage.setItem()

Определение и применение

JavaScript метод setItem() объекта Storage при передаче имени и значения ключа этот ключ добавляется в хранилище (объект Storage) или обновляется, если он уже существует.

Для того, чтобы получить из хранилища (объект Storage) значение определенного ключа воспользуйтесь методом getItem().

Поддержка браузерами

Спецификация: multipage

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьapi.Storage.setItem
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
setItem✓4✓12✓3.5✓10.5✓4✓18✓6✓11✓3.2✓1.0✓4.4✓3.2

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
localStorage.setItem(keyName, keyValue);
sessionStorage.setItem(keyName, keyValue);

Спецификация

HTML Standard.

Значения параметров

Параметры Storage.setItem()
Параметр Описание
keyName Строковое значение, содержащее имя ключа, который вы хотите создать, или обновить. Обязательный параметр.
keyValue Значение, которое вы хотите присвоить ключу при создании, или обновлении. Значение другого типа преобразуется в строку. Обязательный параметр.

Исключения

Исключения Storage.setItem()
Тип исключения Описание
QuotaExceededError Новое значение не удалось сохранить: исчерпана квота или запись запрещена политикой браузера.

Ключи и значения преобразуются в строки. Для объектов используйте JSON.stringify(), при чтении — JSON.parse(). Доступ к самому localStorage или sessionStorage может вызвать SecurityError, если источник или политика браузера запрещают хранение.

Пример использования

Цвет в localStorage

Сохраните полный HTML-документ и откройте его через локальный HTTP-сервер: пример использует настоящее хранилище браузера. Встроенное превью изолировано от хранилища сайта, поэтому здесь доступен просмотр кода.

Исходный код для изучения. Запуск на этой странице недоступен.

index.html
HTML
<button>Clear localStorage</button><span id="info"></span>
<select id="colorPicker">
  <option value=""></option>
  <option value="violet">violet</option>
  <option value="green">green</option>
  <option value="blue">blue</option>
</select>
main.js
JavaScript
function clearLocalStorage() {
    localStorage.clear()
    document.getElementById('colorPicker').value = ''
    document.body.style.background = '#fff'
    updateLocalStorageLength()
}

function setStyles() {
    const val = document.getElementById('colorPicker').value
    try {
        localStorage.setItem('demo_bgcolor', val)
        document.body.style.background = val
    } catch (error) {
        console.log('Ошибочка вышла', error)
    }
    updateLocalStorageLength()
}

function init() {
    const demo_bgcolor = localStorage.getItem('demo_bgcolor')

    if (demo_bgcolor) {
        document.body.style.background = demo_bgcolor
        document.getElementById('colorPicker').value = demo_bgcolor
    }
    updateLocalStorageLength()
}

function updateLocalStorageLength() {
    document.getElementById('info').innerHTML = localStorage.length
}

window.addEventListener('load', function () {
    init()
})

document.querySelector('button').addEventListener('click', function () {
    clearLocalStorage()
})

document.querySelector('select').addEventListener('change', function () {
    setStyles()
})

В этом примере с помощью обработчика события load, зарегистрированного у window через addEventListener(), мы задаем срабатывание функции init() после завершения полной загрузки страницы. Эта функция с помощью метода getItem() пытается получить значение из локального хранилища (localStorage) по указанному ключу и инициализировать переменную этим значением. Если переменная содержит значение по указанному ключу (не равна null), то мы устанавливаем элементу <body> цвет заднего фона соответствующий значению этой переменной. С помощью JavaScript метода getElementById() объекта Document выбираем элемент с определенным глобальным атрибутом id и устанавливаем этому элементу значение, содержащееся в переменной. Кроме того, мы вызываем функцию updateLocalStorageLength(), которая находит элемент с определенным id и устанавливает в качестве содержимого элемента числовое значение, которое соответствует числу элементов данных, хранящихся в хранилище.

С использованием обработчика события change, зарегистрированного через addEventListener(), установленном на элементе <select> мы при изменении значений элемента вызываем функцию setStyles(). Эта функция находит элемент <select> по id и инициализирует переменную значением этого элемента. После этого внутри конструкции try...catch с использованием метода setItem() мы пытаемся добавить или обновить ключ со значением внутри локального хранилища, содержащимся в переменной, и устанавливаем элементу <body> цвет заднего фона, соответствующий этому же значению. Если по каким-то причинам произойдет ошибка, то мы выведем эту ошибку в консоль (перехватим). Обратите внимание, что мы вызываем функцию updateLocalStorageLength().

С использованием метода addEventListener() при нажатии на кнопку (HTML элемент <button>) вызываем функцию, которая с помощью метода clear() производит очистку всех ключей из объекта локального хранилища. Кроме того, находим элемент <select> по id и устанавливаем пустое значение, элементу <body> устанавливаем белый цвет заднего фона. После этого мы вызываем функцию updateLocalStorageLength() и обновляем информацию о числе элементов данных, хранящихся в хранилище.

Результат нашего примера:

Пример использования методов getItem(), setItem() и clear() объекта Storage
Пример использования методов getItem(), setItem() и clear() объекта Storage

В следующем примере мы рассмотрим совместное использование методов getItem(), setItem() и removeItem().

Добавление и удаление ключа

Сохраните полный HTML-документ и откройте его через локальный HTTP-сервер: пример использует настоящее хранилище браузера. Встроенное превью изолировано от хранилища сайта, поэтому здесь доступен просмотр кода.

Исходный код для изучения. Запуск на этой странице недоступен.

index.html
HTML
<button>Check key</button><span id="info"></span>
main.js
JavaScript
function checkKey() {
    const demo_bgcolor = localStorage.getItem('demo_bgcolor'),
        info = document.getElementById('info')

    if (demo_bgcolor) {
        localStorage.removeItem('demo_bgcolor')
        info.innerHTML = 'Ключ удалён'
    } else {
        try {
            localStorage.setItem('demo_bgcolor', 'green')
            info.innerHTML = 'Ключ установлен'
        } catch (error) {
            info.innerHTML = 'Произошла ошибка ' + error.message
        }
    }
}

document.querySelector('button').addEventListener('click', function () {
    checkKey()
})

В этом примере с использованием метода addEventListener() при нажатии на кнопку (HTML элемент <button>) вызываем функцию, которая:

  • Инициализирует две переменные, первая переменная содержит результат вызова метода getItem(), который позволяет получить значение из хранилища по указанному ключу, а вторая содержит ссылку на элемент с определенным глобальным атрибутом id.
  • Если первая переменная содержит значение по указанному ключу (не равна null), то мы с помощью метода removeItem() удаляем указанный ключ из объекта хранилища и устанавливаем новое текстовое содержимое элементу, ссылку на который содержит вторая переменная.
  • Если значение первой переменной соответствует значению null, то внутри конструкции try...catch с использованием метода setItem() мы пытаемся добавить ключ с произвольным строковым значением и устанавливаем новое текстовое содержимое элементу <span>. Если по каким-то причинам произойдет ошибка, то мы её перехватим, а информацию о ней добавим в качестве нового текстового содержимого элемента <span>.

Результат нашего примера:

Пример использования методов getItem(), setItem() и removeItem() объекта Storage
Пример использования методов getItem(), setItem() и removeItem() объекта Storage

В следующем примере мы рассмотрим совместное использование методов setItem(), key() и свойства length.

Ключи sessionStorage

Сохраните полный HTML-документ и откройте его через локальный HTTP-сервер: пример использует настоящее хранилище браузера. Встроенное превью изолировано от хранилища сайта, поэтому здесь доступен просмотр кода.

Исходный код для изучения. Запуск на этой странице недоступен.

index.html
HTML
<button>Show keys</button><span id="info"></span>
main.js
JavaScript
function showKeys() {
    let info = document.getElementById('info')

    for (let i = 0; i < 5; i++) {
        let key = 'demo_key_' + i
        let val = i
        try {
            sessionStorage.setItem(key, val)
        } catch (error) {
            info.innerHTML = 'Произошла ошибка ' + error.message
        }
    }

    for (let i = 0; i < sessionStorage.length; i++) {
        let currentKeyValue = sessionStorage.key(i)
        info.innerHTML += '<p>Ключ под индексом ' + i + ' равен <b>' + currentKeyValue + '</b></p>'
    }
}

document.querySelector('button').addEventListener('click', function () {
    showKeys()
})

В этом примере с использованием метода addEventListener() при нажатии на кнопку (HTML элемент <button>) вызываем функцию, которая:

  • Инициализирует переменную, которая содержит ссылку на элемент с определенным глобальным атрибутом id.
  • С использованием цикла и метода setItem() добавляем пять ключей и значений в хранилище сессии (sessionStorage). Обратите внимание, что мы используем конструкцию try...catch, если по каким-то причинам произойдет ошибка, то мы её перехватим, а информацию о ней добавим в качестве нового текстового содержимого элемента <span>.
  • После этого с помощью цикла и свойства length объекта Storage мы проходим по всем элементам хранилища сессии и с помощью метода key() выводим все их имена путем добавления содержимого элементу <span> на каждой итерации цикла.

Результат нашего примера:

Пример использования методов key() и setItem() объекта Storage
Пример использования методов key() и setItem() объекта Storage