sessionStorage.setItem() 必须传入字符串值,对象需先 JSON.stringify();键名推荐字母数字下划线;超限或私密模式可能静默失败,需 try/catch;读取后需 JSON.parse();不支持当前页监听,跨 tab 需用 localStorage。

sessionStorage.setItem() 怎么用才不会丢数据
写入失败通常不是因为语法错,而是键名用了非法字符或值没转成字符串。sessionStorage 只接受 string 类型的值,传对象会自动调用 toString(),结果是 [object Object],读出来就废了。
- 必须手动
JSON.stringify()对象再存:sessionStorage.setItem('user', JSON.stringify({id: 123, name: 'Alice'})) - 键名避免空格、斜杠、控制字符;推荐只用字母、数字、下划线
- 如果值是
null或undefined,会被转成字符串"null"或"undefined",不是删除操作 - 超过浏览器限制(通常 5–10MB)会抛
QuotaExceededError,需加try/catch
读取时 sessionStorage.getItem() 返回 null 的几种真实原因
getItem() 返回 null 不代表“没存过”,只代表“当前会话里没这个键”,或者之前存的是空字符串但你误判为“有值”。
- 页面刷新后仍存在,但关闭标签页就清空——这是 session 的定义,不是 bug
- 跨子域名不共享:
app.example.com存的,api.example.com读不到 - 私密模式下部分浏览器会禁用或重置 sessionStorage,测试时别只在普通窗口验证
- 读取后记得
JSON.parse(),否则拿到的是字符串,不是对象
sessionStorage 和 localStorage 混用时的典型翻车点
两者 API 完全一致,但生命周期和作用域不同,混用容易误以为“数据还在”,其实早就没了。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 不要用
localStorage.setItem()存登录态再幻想“关掉浏览器也能续签”——sessionStorage 才该管会话级状态 - 调试时用
console.log(sessionStorage.length)看有没有键,比反复getItem()更快 - 清空建议用
sessionStorage.clear(),而不是循环removeItem()——前者原子性更强,不易漏删 - 注意 Safari 在无痕模式下可能对
sessionStorage施加额外限制,比如禁止写入,此时setItem()静默失败
Vue/React 里响应式监听 sessionStorage 变化?别试了
原生 sessionStorage 没事件机制,storage 事件只在**其他同源窗口**触发时广播,当前页面改自己是收不到的。
立即学习“前端免费学习笔记(深入)”;
- 组件内修改后,别指望
window.addEventListener('storage', ...)能触发重新渲染 - 需要响应式更新,得自己封装一层:改值时同步更新一个 ref 或 useState,并手动触发视图更新
- 想跨 tab 同步状态?用
localStorage+storage事件才是正解,sessionStorage 天然不支持 - 服务端渲染(SSR)环境直接访问
sessionStorage会报ReferenceError: sessionStorage is not defined,务必加typeof window !== 'undefined'判断
localhost:3000 和 127.0.0.1:3000 时特别容易踩坑。


















