JavaScript localStorage出现非预期darky相关额外键值问题咨询
问题背景
开发简易书单应用时采用localStorage实现数据持久化,通过ES6 class定义Book类,实例化的书籍对象存入数组后,经JSON.stringify()序列化写入localStorage,核心实现代码如下:
let array = [ // 存储Book对象 ]; // Book类 class Book { constructor(title, author, link, pages) { this.title = title; this.author = author; this.link = link; this.pages = pages; this.isRead = false; } } // 用户新增书籍条目时保存数组数据 function addBook(book, array) { array.push(book); window.localStorage.setItem("library", JSON.stringify(array)); }
查看localStorage存储内容时,除自定义键library对应的书籍数组外,还出现三个非预期键值对:
darkyMode: "1" darkyState: "f" darkySupported: "t"
项目仅使用Bootstrap与原生JavaScript开发,需要确认该现象是否为JavaScript正常表现,同时需要移除额外存储项、避免这类非预期存储项再次出现。
结论
该现象不是JavaScript的正常表现,和编写的业务代码、官方原生Bootstrap框架无关联。
原因说明
三个带darky前缀的存储项为第三方脚本自动写入的配置:
- 最常见来源是浏览器安装的全局暗色模式、网页美化类扩展,这类扩展会向所有访问的网页注入运行脚本,自动将暗色模式开关状态、运行状态、兼容性标记写入当前域名的
localStorage - 少数情况是引入Bootstrap资源时误加载了第三方暗色主题适配插件,这类插件会自动生成上述三个键存储自身运行配置
- 原生
JSON.stringify序列化逻辑、localStorage.setItem原生API都不会自动生成额外的非指定键值对,现有Book类定义、addBook存储逻辑不存在问题,不会生成这类冗余字段。
处理方案
- 清理现有冗余存储项:可直接在浏览器开发者工具的本地存储面板手动删除三个
darky开头的键,也可在应用初始化逻辑中加入自动清理代码:
// 应用启动时执行,清理已知非预期存储项 ['darkyMode', 'darkyState', 'darkySupported'].forEach(key => { window.localStorage.removeItem(key) })
- 避免后续重复出现:
- 禁用浏览器中安装的全局暗色、网页美化类扩展,这类扩展会跨站点注入脚本写入存储
- 核对项目引入的CDN或本地静态资源,确认Bootstrap引入源为官方渠道,没有附带额外的第三方主题脚本
内容的提问来源于stack exchange,提问作者John Roice M. Aldeza
相关产品推荐
相关产品推荐

