LocalStorage始终返回false求助:dark_mode存储取值异常
LocalStorage读取值始终为false的问题分析与解决
问题根源
你的代码存在几个关键逻辑错误,导致LocalStorage始终返回false:
- 首次执行的默认值逻辑错误:当LocalStorage中没有
dark_mode项时,localStorage.getItem("dark_mode")返回null,JSON.parse(null)得到null(属于假值),此时if(currentMode)分支不触发,darkMode被设为false并存入LocalStorage。后续刷新页面时,读取到的永远是false,形成死循环。 - 函数参数未接收:调用
setDark(darkMode)时传递了参数,但函数定义function setDark()未接收参数,虽然依赖全局变量能运行,但易引发逻辑混乱。 - 冗余初始赋值:
let darkMode = true;之后立刻被if-else分支覆盖,无实际作用。
修正后的代码
// 读取存储值,无值时默认设为true const json = localStorage.getItem("dark_mode"); const currentMode = json ? JSON.parse(json) : true; let darkMode = currentMode; setDark(darkMode); function setDark(mode) { if (mode) { console.log('add yes'); } else { console.log('add no'); } localStorage.setItem("dark_mode", JSON.stringify(mode)); }
修正说明
- 调整默认值逻辑:当LocalStorage中无
dark_mode项时,将currentMode默认设为true,首次执行就会存入true,刷新后读取到true,控制台会输出“add yes”。 - 修复函数参数:让
setDark函数接收传入的mode参数,避免依赖全局变量,逻辑更清晰可控。 - 移除冗余代码:直接根据
currentMode赋值给darkMode,去掉无意义的初始赋值。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

