【问题标题】:using localStorage to keep a count使用 localStorage 进行计数
【发布时间】:2012-03-31 01:53:18
【问题描述】:
var nicWinsVsMac;

 if (tempresult === win) {
            wincount = JSON.parse(localStorage.getItem (playerName + 'wincount'));
            wincount += 1;
            localStorage.setItem(playerName + 'wincount', wincount);

        winsvsopponent = 'WinsVs' + opponent;
        winsvsopponent = JSON.parse(localStorage.getItem(playerName + 'WinsVs' + opponent));
        winsvsopponent  += 1;
        console.log(winsvsopponent);
        localStorage.setItem(playerName + 'WinsVs' + opponent, 'winsVs' + opponent); 
        console.log(localStorage.getItem(nicWinsVsMac));    
    }

playerNameopponent是传入的参数,本例中playerName = 'nic'opponent = "Mac"

我的浏览器在我解析出localStorage 的行上给了我“意外的令牌w”。我无法弄清楚发生了什么。任何帮助都会很棒。谢谢!

【问题讨论】:

  • 发生了什么?您保存了无效的 JSON。在该行上放置一个断点并检查值。
  • 我应该在哪里做呢?不确定我是否遵循抱歉
  • 好吧,至少这样做:console.log(localStorage.getItem(playerName + 'WinsVs' + opponent)) 在出错前在线。
  • 出于某种原因,我刚拿到 WinsVsMac,应该是 nicWinsVsMac
  • 让我试着把所有必要的部分放在一个 jsfiddle 上

标签: javascript json local-storage


【解决方案1】:

而不是为播放器的每个属性使用单独的 localStorage 变量。为什么不将所有玩家属性存储在单个对象中,然后将其保存到 localStorage。

例如,您可以执行以下操作:

var player = new Object();
player.name = 'Mac';
player.winCount = 3;
player.winAgainst = new Array();

localStorage.setItem(player.name, JSON.stringify(player));

var player1 = JSON.parse(localStorage.getItem(player.name));
console.log(player1.name + " has " + player1.winCount + " wins.");

这允许您将所有播放器的属性保存到单个 localStorage 变量中,从而更容易读取和写入。

关于您收到的错误,我认为您的代码的问题是您在调用 setItem 时没有使用 JSON.stringify。

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 2017-05-09
    • 2011-10-15
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2014-09-14
    相关资源
    最近更新 更多