咦?localStorage 还可以这么玩!

开发web的同事基本上都离不开一种存储方式localStrage,localStorage 是浏览器提供的 本地持久化存储 机制,允许开发者以键值对形式在客户端存储数据,数据不会因页面刷新或浏览器关闭而丢失。下面是其核心用法和注意事项:


一、核心方法

  1. 存储数据setItem(key, value)

存储键值对,键和值均为字符串。若键已存在,则覆盖原值。

javascript 复制代码
localStorage.setItem("username", "Alice");
// 存储对象需序列化
const user = { name: "Alice", age: 25 };
localStorage.setItem("user", JSON.stringify(user));

• 直接赋值

可通过属性形式存储(等效于 setItem):

javascript 复制代码
localStorage.username = "Alice";
  1. 读取数据getItem(key)

通过键获取值,若键不存在则返回 null

javascript 复制代码
const username = localStorage.getItem("username"); // "Alice"

• 直接访问属性

javascript 复制代码
const user = JSON.parse(localStorage.user); // 反序列化对象
  1. 删除数据removeItem(key)

删除指定键值对:

javascript 复制代码
localStorage.removeItem("username");

clear()

清空所有本地存储数据:

javascript 复制代码
localStorage.clear();
  1. 其他操作key(index)

通过索引获取键名:

javascript 复制代码
const firstKey = localStorage.key(0);

length

获取存储的键值对数量:

javascript 复制代码
const count = localStorage.length;

二、数据类型处理

• 仅支持字符串

所有数据需以字符串形式存储。处理对象或数组时需转换:

javascript 复制代码
// 存储对象
localStorage.setItem("user", JSON.stringify({ name: "Alice" }));

// 读取对象
const user = JSON.parse(localStorage.getItem("user"));

三、注意事项

  1. 同源策略

    仅同源(相同协议、域名、端口)的页面可共享数据。

  2. 容量限制

    通常为 5MB(不同浏览器可能略有差异),超出会抛出异常。

  3. 安全性

    • 避免存储敏感信息(如密码、令牌),因数据可被 JavaScript 直接读取。

    • 防范 XSS 攻击,确保页面无恶意脚本注入风险。

  4. 兼容性

    现代浏览器均支持,但需检测环境:

    javascript 复制代码
    if (typeof(Storage) !== "undefined") {
      // 支持 localStorage
    }

四、常见应用场景

  1. 用户偏好设置

    保存主题、语言等配置:

    javascript 复制代码
    localStorage.setItem("theme", "dark");
  2. 购物车信息

    持久化存储商品列表:

    javascript 复制代码
    const cart = JSON.parse(localStorage.getItem("cart")) || [];
    cart.push(newItem);
    localStorage.setItem("cart", JSON.stringify(cart));
  3. 表单自动保存

    防止用户输入意外丢失:

    javascript 复制代码
    document.querySelector("input").addEventListener("input", (e) => {
      localStorage.setItem("formData", JSON.stringify(e.target.value));
    });
  4. 登录状态保持

    存储用户登录凭证(需加密):

    javascript 复制代码
    localStorage.setItem("token", "encrypted_token");

五、与其他存储的区别

特性 localStorage sessionStorage Cookie
生命周期 永久存储 会话结束即消失 可设置过期时间
数据共享范围 同源所有窗口 仅当前窗口 跨域可共享(需设置)
容量限制 约5MB 约5MB 通常4KB
传输到服务器 是(每次请求携带)

六、进阶技巧

• 监听数据变化

通过 storage 事件监听其他窗口的修改:

javascript 复制代码
window.addEventListener("storage", (e) => {
  if (e.key === "theme") {
    applyTheme(e.newValue);
  }
});

• 模拟过期时间

手动添加时间戳字段:

javascript 复制代码
// 存储时
localStorage.setItem("data", JSON.stringify({ value: "test", expire: Date.now() + 3600000 }));

// 读取时
const data = JSON.parse(localStorage.getItem("data"));
if (data.expire < Date.now()) {
  localStorage.removeItem("data");
}

通过合理使用 localStorage,可以显著提升 Web 应用的用户体验,但需注意数据安全和存储效率。对于复杂场景(如大量数据存储),可结合 IndexedDB 等方案。

相关推荐
FogLetter1 分钟前
React组件化开发:从"搬砖"到"搭积木"的艺术
前端·react.js·前端框架
中微子2 分钟前
手写JavaScript Promise:深入理解异步编程的核心
前端
架构个驾驾2 分钟前
前端微服务框架深度对比:无界(Momentum)与乾坤(Qiankun)实战指南
前端·前端框架
前端小巷子3 分钟前
WebSQL:浏览器端的 SQL 数据库
前端·javascript·面试
Roger_zz3 分钟前
一个问卷调查的小思路
前端
Hilaku3 分钟前
用了三年 Vue,我终于理解为什么“组件设计”才是重灾区
前端·javascript·vue.js
HuYi_code4 分钟前
制作一个多层表头的实现
前端·vue.js
长弓三石4 分钟前
鸿蒙网络编程系列53-仓颉版TCP连接超时分析示例
前端·harmonyos
ShareJasmine5 分钟前
Vue将后端数据转成树形结构的方法
前端·vue.js
日升5 分钟前
AI 组件库-MateChat 高级玩法:多会话(四)
前端·ai编程·trae