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

如何将服务器返回的整数与localStorage数据相加后存储?

解决localStorage中分数累加的正确方式

你的问题核心在于没处理localStorage的字符串存储特性,以及初始值为null的情况,直接用+会触发字符串拼接而非数值相加,导致结果不符合预期。下面是修复后的方案:

正确实现代码

// 读取本地存储的分数,转换为数值,无值时默认0
const storedScore = Number(localStorage.getItem("RelationScore")) || 0;
// 确保服务器返回的Total是数值类型(即使服务器返回整数,做个保险转换)
const newServerScore = Number(data.Total) || 0;
// 计算累加后的总分
const totalRelationScore = storedScore + newServerScore;
// 将结果存入localStorage(注意:localStorage只能存字符串,所以转成字符串存储)
localStorage.setItem("RelationScore", totalRelationScore.toString());

为什么你的原代码会出问题?

  • localStorage的所有存储值都是字符串类型,直接用data.Total + localStorage.getItem("RelationScore")会触发字符串拼接:比如本地存了"456",服务器返回123,原代码会得到"123456"而不是正确的579。
  • 当第一次访问时,localStorage.getItem("RelationScore")会返回null,原代码拼接后得到类似"123null",虽然你用replace('null', '')处理成了"123",但这是投机取巧的做法,逻辑不严谨(比如如果分数本身包含"null"字符串就会出问题)。

代码逻辑解释

  1. Number(...) || 0:把读取到的字符串/Null转换为数值,如果转换失败(比如Null转成NaN),则用0作为默认值,确保初始状态下也能正确累加。
  2. 强制数值转换:即使服务器返回的data.Total是整数,也用Number()转换一次,避免因后端偶尔返回字符串类型的数字导致拼接错误。
  3. 存入时转字符串:因为localStorage只支持字符串存储,所以把最终的数值转成字符串再存入,保证下次读取时能正确转换回数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:46:34