当前位置: 首页 > news >正文

前端知识点---本地存储(javascript)

localStorage 是浏览器提供的一个 本地存储 API,可以在用户的浏览器中存储数据,数据不会随页面刷新而丢失。

1. 基本用法

(1) 存储数据(setItem)


localStorage.setItem("username", "zhangsan");

存储 “username”: “zhangsan” 到本地。

(2) 读取数据(getItem)


let user = localStorage.getItem("username");
console.log(user); // "zhangsan"

获取 localStorage 里 “username” 的值。

(3) 删除数据
删除单个数据(removeItem)


localStorage.removeItem("username");

清空所有数据(clear)


localStorage.clear();
  1. 存储对象
    localStorage 只能存字符串,要存对象的话,需要用 JSON.stringify() 转换:

<!-- 存储对象可以实现多条数据  -->
 <script>
    const obj={
        name:'张三', 
        age:18, 
        gender:'男'
    }
    localStorage.setItem('obj', obj)//前面的obj是键, 后面是值 不一样 
    console.log(localStorage.getItem('obj'));
    // 因为只能存字符串 所以结果是[object Object]
    // 解决:需要将复杂数据类型转换成ISON字符串,在存储到本地语法:JSON.stringify(复杂数据类型)
    localStorage.setItem('obj', JSON.stringify(obj))
     console.log(localStorage.getItem('obj'));//但是这是字符串形式

在这里插入图片描述
在这里插入图片描述

读取时需要 JSON.parse() 解析回来:


 console.log(JSON.parse(localStorage.getItem('obj') ));

在这里插入图片描述

3. 实际案例:存储商品数据


let products = [
    { id: 1, title: "商品1", price: 100 },
    { id: 2, title: "商品2", price: 200 },
];

// 存储商品列表
localStorage.setItem("products", JSON.stringify(products));

// 读取商品列表
let savedProducts = JSON.parse(localStorage.getItem("products"));
console.log(savedProducts);

4. sessionStorage vs localStorage

特性localStoragesessionStorage
存储时间永久存储,页面关闭后仍然存在仅在 当前标签页 有效,关闭标签页数据就没了
存储大小约 5MB约 5MB
作用域同源的所有页面都能访问只在当前页面的 标签页 内有效

简单来说:

localStorage 用于长期存储数据,例如用户设置、购物车数据等。

sessionStorage 用于短期存储,例如表单数据、临时会话信息等。

5. localStorage 监听(storage 事件)

当 同一浏览器的不同页面 修改 localStorage 时,其他页面可以监听变化:


window.addEventListener("storage", (event) => {
    console.log("localStorage 变化:", event);
});

⚠ 同一页面不会触发 storage 事件,只有其他页面修改 localStorage 才会触发。

6. 适用场景

记住用户设置(如夜间模式)

存储用户的购物车数据

本地缓存 API 请求结果

跨页面共享数据

http://www.dtcms.com/a/111491.html

相关文章:

  • IObit Uninstaller:深度清理残留文件
  • 黑马点评_知识点
  • #Liunx内存管理# 在32bit Linux内核中,用户空间和内核空间的比例通常是3:1,可以修改成2:2吗?
  • Flutter 手搓日期选择
  • 浅析联咏NT9856X各种LCD显示屏接口技术
  • 操作系统(三):FreeRTOS实时性机制分析
  • 音视频(四)android编译
  • 【2019】【论文笔记】高resolution无透镜的THz成像和测距——
  • antvX6节点全选后鼠标通过拖拉调整视图的展示位置
  • 基于springboot微信小程序的旅游攻略系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 码曰编程大模型-学编程的好工具
  • 【嵌入式学习4】模块、包、内置模块、异常
  • CherryStudio MCP实战(一)filesystem篇
  • Cmake:Win10 如何编译 midifile C++应用程序
  • leetcode 数组总结篇
  • 湖北师范大学计信学院研究生课程《工程伦理》12.6章节练习
  • 离线部署kubesphere(已有k8s和私有harbor的基础上)
  • 鸿蒙 harmonyOS 网络请求
  • AWS云安全基线:构建企业级安全防护体系的完整指南
  • Ubuntu 安装 JMeter:为你的服务器配置做好准备
  • C++ - 宏基础(简单常量替换宏、函数样式的宏、多行宏、预定义宏、字符串化宏、连接宏、可变参数日志宏)
  • 深入理解C++引用:从基础到现代编程实践
  • 【设计模式】代理模式
  • 如何计算财富自由所需要的价格?
  • mapbox进阶,使用本地dem数据,加载hillshade山体阴影图层
  • 什么是缓存穿透、缓存雪崩、缓存击穿?
  • 使用VS2022远程调试Linux项目问题
  • Linux / Windows 下 Mamba / Vim / Vmamba 安装教程及安装包索引
  • 程序化广告行业(54/89):人群标签、用户标签与Look Alike原理详解
  • 鸿蒙NEXT开发随机工具类(ArkTs)