如何将服务器返回的整数与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"字符串就会出问题)。
代码逻辑解释
Number(...) || 0:把读取到的字符串/Null转换为数值,如果转换失败(比如Null转成NaN),则用0作为默认值,确保初始状态下也能正确累加。- 强制数值转换:即使服务器返回的
data.Total是整数,也用Number()转换一次,避免因后端偶尔返回字符串类型的数字导致拼接错误。 - 存入时转字符串:因为localStorage只支持字符串存储,所以把最终的数值转成字符串再存入,保证下次读取时能正确转换回数值。
内容的提问来源于stack exchange,提问作者user9402741
相关产品推荐
相关产品推荐

