JavaScript localStorage

概要: このチュートリアルでは、Storage型と、永続的なデータを保存するためにJavaScriptのlocalStorageを使用する方法について学習します。

Storage型の概要

Storage型は、名前と値のペアを保存するように設計されています。Storage型は、以下の追加メソッドを持つObjectです。

  • setItem(name, value) – 名前に対する値を設定します。
  • removeItem(name) – nameで識別される名前と値のペアを削除します。
  • getItem(name) – 指定された名前の値を取得します。
  • key(index) – 指定された数値の位置にある値の名前を取得します。
  • clear() – すべての値を削除します。

Storageオブジェクト内の名前と値のペアの数を取得するには、lengthプロパティを使用できます。

Storageオブジェクトは文字列のみを保存できます。文字列以外のデータは、保存前に自動的に文字列に変換されます。

Storageオブジェクトからデータを取得するときは、常に文字列データが取得されます。

JavaScript localStorageオブジェクト

HTML5仕様では、localStorageを、Webブラウザに有効期限のないデータを保存する方法として導入しています。

言い換えると、ブラウザに保存されたデータは、ブラウザウィンドウを閉じた後も保持されます。

localStorageに保存されたデータは、オリジンにバインドされています。つまり、localStorageprotocol://host:portごとに一意です。

localStorageとCookieの比較

まず、localStorageに保存されたデータは、Cookieのように、すべてのリクエストでサーバーに送信されません。このため、localStorageにはより多くのデータを保存できます。

最新のWebブラウザのほとんどでは、localStorageに最大5MBのデータを保存できます。Cookieには最大4KBを保存できることに注意してください。

次に、localStorageに保存されたデータは、クライアント、具体的にはWebブラウザ内のJavaScriptによって管理できます。サーバーからアクセスすることはできません。

ただし、Cookieは、Webブラウザとサーバーの両方のJavaScriptによって管理できます。

localStorageへのアクセス

localStorageには、windowオブジェクトのプロパティを介してアクセスできます。

window.localStorageCode language: JavaScript (javascript)

localStorageStorage型のインスタンスであるため、Storage型のメソッドを使用してデータを管理できます。

コンソールで次のコードを入力すると

window.localStorageCode language: JavaScript (javascript)

…次のオブジェクトが表示されます。

Storage {length: 0}Code language: CSS (css)

1) setItem()メソッド

次は、setItem()メソッドを使用して、名前と値のペアをlocalStorageに保存する方法です。

window.localStorage.setItem('theme','dark');Code language: JavaScript (javascript)

2) lengthプロパティ

名前と値のペアの数を取得するには、次のようにlengthプロパティを使用します。

console.log(window.localStorage.length); // 1Code language: JavaScript (javascript)

windowオブジェクトはグローバルなので、明示的に指定する必要はありません。たとえば

console.log(localStorage.length); // 1Code language: JavaScript (javascript)

3) getItem()メソッド

キーで値を取得するには、getItem()メソッドを使用します。次の例では、getItem()メソッドを使用してthemeキーの値を取得しています。

localStorage.getItem('theme'); // 'dark'Code language: JavaScript (javascript)

4) removeItem()メソッド

キーで名前と値のペアを削除するには、removeItem()メソッドを使用します。たとえば

localStorage.removeItem('theme');Code language: JavaScript (javascript)

5) localStorageオブジェクトのキーをループする

次は、3つの名前と値のペアをlocalStorageに保存する方法です。

localStorage.setItem('theme','light');
localStorage.setItem('backgroundColor','white');
localStorage.setItem('color','#111');Code language: JavaScript (javascript)

localStorageに保存されている名前と値のペアを反復処理するには、Object.keys()メソッドとfor...ofループを使用します。

let keys = Object.keys(localStorage);
for(let key of keys) {
  console.log(`${key}: ${localStorage.getItem(key)}`);
}Code language: JavaScript (javascript)

出力

color: #111
theme: light
backgroundColor: whiteCode language: HTTP (http)

オブジェクトの保存

Storage型は文字列データのみを保存します。オブジェクトを保存するには、JSON.stringify()メソッドを使用して文字列に変換する必要があります。たとえば

const settings = {
    backgroundColor: '#fff',
    color: '#111',
    theme: 'light'
};

localStorage.setItem('settings', JSON.stringify(settings));

console.log(localStorage.getItem('settings'));Code language: JavaScript (javascript)

出力:(文字列)

'{"backgroundColor":"#fff","color":"#111","theme":"light"}'Code language: JavaScript (javascript)

次は、localStorageから値を取得し、JSON.parse()メソッドを使用してオブジェクトに戻す方法です。

let storedSettings = JSON.parse(localStorage.getItem('settings'));
console.log(storedSettings);Code language: JavaScript (javascript)

storageイベント

Storageオブジェクトに変更を加えると、ドキュメントでstorageイベントが発生します。

storageイベントは、次のシナリオで発生します。

  • setItem()メソッドを呼び出して、名前と値のペアを保存します。
  • removeItem()メソッドを呼び出して、名前と値のペアを削除します。
  • そして、clear()メソッドを呼び出してすべての値を削除します。

storageイベントには、次のプロパティがあります。

  • domain – ストレージが変更されたドメイン。
  • key – 設定または削除されたキー。
  • newValue – キーが設定された値、またはキーが削除された場合はnull
  • oldValue – キーが設定または削除される前の値。

storageイベントをリッスンするには、次のようにwindowオブジェクトのaddEventListener()メソッドを使用します。

addEventListener('storage', function(e){
   console.log(`The value of the ${e.key} changed for the ${e.domain}.`);
});Code language: JavaScript (javascript)

まとめ

  • Storage型は、Webブラウザでデータを保存および管理するためのメソッドを提供します。
  • localStorageは、Webブラウザに永続的なデータを保存できるようにするStorage型のインスタンスです。
  • localStorageは文字列のみを保存できます。オブジェクトを保存するには、JSON.stringify()メソッドを使用して文字列に変換します。そして、JSON.parse()メソッドを使用して、localStorageから取得したときに文字列をオブジェクトに変換します。
このチュートリアルは役に立ちましたか?