bom 本身不直接使用 localstorage,但 localstorage 是 window 对象的内置属性,而 window 是 bom 的顶层核心对象;因此 localstorage 属于 bom 体系中的持久化存储标准接口,通过 window.localstorage 或简写 localstorage 即可调用,无需引入,支持 setitem、getitem 等操作,存取复杂数据需 json 序列化与反序列化,并受同源策略和容量限制约束。

JavaScript 中 BOM(Browser Object Model)本身不直接“使用” localStorage,但 localStorage 是 window 对象的内置属性,而 window 正是 BOM 的顶层核心对象。换句话说,localStorage 是 BOM 体系中用于持久化存储的标准接口,调用它就是通过 BOM 完成的。
localStorage 是 window 的原生属性
你不需要额外引入或实例化,只要在浏览器环境中(非 Node.js 或无权限环境),就可以直接访问:
-
window.localStorage或简写为localStorage—— 它是全局可用的,因为window是 BOM 的根对象 - 所有操作如
setItem()、getItem()、removeItem()都属于 BOM 提供的 Web Storage API - 这意味着页面跳转(
location.href)、刷新(location.reload())、前进后退(history.back())都不会影响已存数据
存取复杂数据必须序列化和反序列化
localStorage 只接受字符串作为值,数组、对象等必须手动转换:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 存数组:用
JSON.stringify()转成字符串再存 - 取数组:先用
getItem()获取字符串,再用JSON.parse()还原;注意判空和容错 - 示例:
localStorage.setItem('todos', JSON.stringify([{id:1,text:'吃饭'}]));const todos = JSON.parse(localStorage.getItem('todos') || '[]');
读写时要注意安全与兼容性
不是所有环境都支持 localStorage,也不是每次写入都一定成功:
- 用户可能禁用本地存储,或处于无痕模式 —— 写入前建议加
try...catch -
getItem()返回null表示键不存在,不能直接JSON.parse(null) - 同源限制严格:协议、域名、端口三者完全一致才可共享数据;
http://和https://视为不同源 - 容量通常为 5–10 MB,大文本或频繁写入需评估是否超限
典型 BOM 场景下的持久化实践
结合 BOM 常见操作,localStorage 常用于保存跨页面状态:
- 用户主题偏好(dark/light):页面加载时读取并应用样式,切换时更新 localStorage
- 搜索历史:在搜索框输入后,将关键词 push 到数组并存入,下拉列表从 localStorage 读取渲染
- 表单草稿:监听 input 或 blur 事件,自动保存未提交的数据,刷新后恢复
- 多步骤流程进度:用
history.pushState()导航时,同步更新 localStorage 中的当前步骤标识
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










