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

为何LocalStorage.getItem取值为undefined?已存值仍异常

解决LocalStorage存储分数后刷新无法累加的问题

你遇到的核心问题有两个:

  • 存储逻辑冗余:playx.innerHTML本身就是字符串,没必要用JSON.stringify处理,反而会增加解析复杂度
  • 读取时错误使用了不存在的.numeric属性:该属性根本不存在,导致读取返回undefined,最终分数被迫重置为0

修复步骤

1. 修正存储逻辑

直接将分数转成数字后存储(LocalStorage会自动转为字符串保存),无需额外的JSON.stringify:

// 把DOM中的分数字符串转为数字
const currentScore = Number(playx.innerHTML);
// 存储到LocalStorage
localStorage.setItem('score', currentScore);

2. 修正读取逻辑

去掉错误的.numeric调用,直接读取并转为数字,同时设置默认值避免undefined:

// 页面初始化时读取保存的分数,没有则用0
const savedScore = localStorage.getItem('score');
const initialScore = savedScore ? Number(savedScore) : 0;
// 把初始值渲染到DOM
playx.innerHTML = initialScore;

3. 累加分数的正确流程

每次累加时,先读取当前分数、更新后同步到DOM和LocalStorage:

// 示例:累加指定分数
function addScore(points) {
  let currentScore = Number(playx.innerHTML);
  currentScore += points;
  // 更新DOM
  playx.innerHTML = currentScore;
  // 同步到LocalStorage
  localStorage.setItem('score', currentScore);
}

失效原因复盘

  • 用JSON.stringify(playx.innerHTML)存储会给字符串多套一层引号(比如原本的"1"会变成""1""),增加后续解析难度
  • 读取时错误调用不存在的.numeric属性,导致无法获取LocalStorage中已保存的"1",最终只能使用默认值0

内容的提问来源于stack exchange,提问作者willd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:22:09