You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:30:58