変数に入れた値は、ページを再読みこみすると消えてしまいます。閉じても消えないメモ帳がブラウザには用意されていて、それがlocalStorageです。ダークモードの設定やゲームのハイスコアなど、「覚えておいてほしいもの」に使います。
覚えるのは3つの操作だけ
localStorage.setItem("name", "しまちゃん"); // 保存する
const name = localStorage.getItem("name"); // 取り出す
localStorage.removeItem("name"); // 消す| 書き方 | やること |
|---|---|
setItem("キー", "値") | ラベルを付けて保存する |
getItem("キー") | ラベルで探して取り出す |
removeItem("キー") | そのラベルのものを消す |
clear() | このサイトの保存を全部消す |
"name"の部分はキー(ラベル)です。オブジェクトのキーと同じで、自分で自由に決められます。
保存されているか確かめる
保存がなかった場合、getItemはnull(何もない、の印)を返します。取り出したあとに確認するのが定番の形です。
const saved = localStorage.getItem("name");
if (saved === null) {
console.log("まだ保存されていません");
} else {
console.log("前回の名前は " + saved);
}ページを開いたときにこれを実行すると、前回の続きから始められるページが作れます。
文字しか入らない
localStorageに入るのは文字だけです。ここがいちばんのつまずきどころ。
localStorage.setItem("score", 100);
const score = localStorage.getItem("score");
console.log(score + 1); // 「1001」になってしまう数として使いたいときは、取り出したあとにNumber()で戻します。
const score = Number(localStorage.getItem("score"));
console.log(score + 1); // 101配列やオブジェクトを保存したいときは、いったん文字に変換します。
const likes = ["おえかき", "ラーメン"];
localStorage.setItem("likes", JSON.stringify(likes)); // 文字にして保存
const saved = JSON.parse(localStorage.getItem("likes")); // 元の形に戻す
console.log(saved[0]);JSON.stringify()——配列やオブジェクトを文字にするJSON.parse()——文字を元の形に戻す
対になっているので、「保存するときstringify、読むときparse」とセットで覚えてください。
使いどころの例
// ダークモードの設定を覚えておく
localStorage.setItem("theme", "dark");
// 次に開いたとき、前回の設定を復元する
if (localStorage.getItem("theme") === "dark") {
document.body.classList.add("dark");
}このパターンだけでも、「毎回設定し直さなくていいページ」が作れます。
CSSダークモードに対応しようダークモードの見た目そのものの作り方は、CSSコースのこの回へ保存されたものを目で見る
ブラウザの開発者ツールで中身を確認できます。ChromeならApplication(アプリケーション)タブ → 左メニューのLocal Storage。キーと値が表の形で並び、その場で削除もできます。
「保存できているつもりで、実は書けていない」を確かめるときに便利です。
べんりワザ開発者ツールの使い方入門開発者ツールの開き方から知りたい方はこちら入れてはいけないもの・注意点
そのほか、性質として知っておくとよいことがあります。
- ブラウザごと・端末ごとに別物。ChromeとSafariでは共有されないし、スマホとパソコンでも別
- サイトごとに分かれている。他のサイトからは読めない
- 保存できる容量は5MB程度。文字のメモなら十分だが、画像を詰めこむ用途には向かない
- ブラウザの「閲覧データを削除」でまとめて消える。消えても困らないものだけを入れる
このレッスンのまとめ
setItemで保存、getItemで取り出し、removeItemで削除——閉じても消えない- 入るのは文字だけ。数は
Number()、配列やオブジェクトはJSON.stringify()とJSON.parse() - 中身は誰でも読めるので、パスワードや個人情報は保存しない