如何替换LocalStorage项?仅当新项更大时生效,比较逻辑失效求助
解决LocalStorage数值比较失效的问题
嘿,别担心!新手遇到这种LocalStorage的坑太正常了,我来帮你搞定~
问题根源:LocalStorage存的都是字符串!
你遇到的核心问题是:LocalStorage里存储的所有数据都会被自动转成字符串类型。哪怕你存进去的是数字,取出来的时候也会变成字符串。直接用>比较字符串的话,不是按数字大小来的,而是按字符的Unicode顺序比较——比如"100"和"99"比的话,"100"反而会被判定为更小(因为第一个字符"1"比"9"的Unicode值小),这就导致你的比较逻辑完全不对啦!
解决步骤(附代码示例)
只需要把取出的字符串转成数字,再和新值比较就行,步骤如下:
- 先从LocalStorage取出目标项,同时处理「第一次存储、没有已有值」的情况
- 把取出的字符串转成数字(整数用
parseInt(),浮点数用parseFloat()) - 用数字类型做大小比较,确认新值更大后,再把新值转成字符串存回LocalStorage(因为LocalStorage只接受字符串)
举个具体的代码例子(假设我们要存的是游戏高分highScore):
// 你的新数值(比如玩家刚拿到的分数) const newScore = 180; // 从LocalStorage取出已有值 const storedScoreStr = localStorage.getItem('highScore'); // 处理无存储项的情况,默认设为0;同时把字符串转成整数 const storedScore = storedScoreStr ? parseInt(storedScoreStr, 10) : 0; // 现在用数字做比较就没问题啦! if (newScore > storedScore) { // 存回的时候要转成字符串,因为LocalStorage只认字符串 localStorage.setItem('highScore', newScore.toString()); console.log('高分更新成功!'); } else { console.log('当前分数没超过已有记录哦~'); }
额外小提示
- 如果你的数值是小数(比如123.45),就把
parseInt()换成parseFloat(),或者用Number()函数来转 - 如果担心存储的内容不是合法数字,可以加个判断:
if (!isNaN(storedScore)),避免转数字出错
内容的提问来源于stack exchange,提问作者Lennard
相关产品推荐
相关产品推荐

