Z
ZHANK
实用技能

本地存储

掌握 localStorage、sessionStorage 的使用

本地存储

Web Storage API 让浏览器端存储数据变得极为简单。

学完本章你将: 掌握 localStorage、sessionStorage 的使用。


localStorage vs sessionStorage

javascript
// localStorage:永久存储(直到手动删除)
localStorage.setItem("theme", "dark");
let theme = localStorage.getItem("theme");
console.log(theme); // "dark"

// sessionStorage:标签页关闭后清除
sessionStorage.setItem("temp", "data");
let temp = sessionStorage.getItem("temp");
console.log(temp); // "data"
特性localStoragesessionStorage
容量~5-10MB~5-10MB
生命周期永久标签页关闭
作用域同源共享同标签页
跨标签页

增删改查

javascript
// 增/改
localStorage.setItem("key", "value");

// 查
let value = localStorage.getItem("key");

// 删单个
localStorage.removeItem("key");

// 清空所有
localStorage.clear();

// 键的数量
console.log(localStorage.length);

// 迭代
for (let i = 0; i < localStorage.length; i++) {
    let key = localStorage.key(i);
    console.log(key, localStorage.getItem(key));
}

存储对象

javascript
// localStorage 只能存储字符串,需要序列化

let user = { name: "Alice", age: 25, settings: { theme: "dark" } };

// 存储
localStorage.setItem("user", JSON.stringify(user));

// 读取
let stored = JSON.parse(localStorage.getItem("user"));
console.log(stored.name); // "Alice"

// 封装工具函数
const storage = {
    set(key, value) {
        localStorage.setItem(key, JSON.stringify(value));
    },
    get(key) {
        try {
            return JSON.parse(localStorage.getItem(key));
        } catch {
            return null;
        }
    },
    remove(key) {
        localStorage.removeItem(key);
    },
};

storage.set("user", user);
console.log(storage.get("user").name); // "Alice"

storage 事件

javascript
// 监听其他标签页的 storage 变化(同一标签页不会触发)
window.addEventListener("storage", (event) => {
    console.log("键:", event.key);
    console.log("旧值:", event.oldValue);
    console.log("新值:", event.newValue);
    console.log("URL:", event.url);
});

// 应用:多标签页通信
localStorage.setItem("sync", Date.now().toString());

注意事项

注意说明
同步 API大容量操作可能阻塞主线程
同源策略协议+域名+端口完全相同才共享
隐私模式部分浏览器限制 storage
不存敏感信息可被用户查看和修改