连接用户时从localStorage设置数据

时间:2017-01-23 12:22:32

标签: javascript save

我一直在为我的游戏制作一个保存文件。保存文件正常工作,console.log显示正确的值:

function saveGame(){
    localStorage.setItem('game', JSON.stringify(game));
}
function loadGame(){
    var retrievedObject = localStorage.getItem('game');
    console.log('retrievedObject: ', JSON.parse(retrievedObject));
}

日志图片:https://s28.postimg.org/bslusmagt/Untitled.png enter image description here

由于我几个月前开始学习JS,所以我还是新手。现在我的猜测是,当页面加载时,我应该设置所有这些值。尝试下一件事我在console.log中得到“null”

console.log(JSON.parse(localStorage.getItem('game.plutonium')));

我认为价值观可以设置为:

game.plutonium = localStorage.getItem('game.plutonium');

但它不起作用。这是什么诀窍?

以下是我的完整JS代码,以防万一:http://pastebin.com/yM2wz410

值从第1行定义,保存/加载文件在第350-356行。 为什么我的方法不起作用?

function saveGame(){
     var savefile = JSON.stringify(game);
     localStorage.setItem("game", savefile);
}

function loadGame(){
     var savefile = localStorage.getItem("game");

     if (savefile === null) {
         return;
      }

     game = JSON.parse(savefile);
 }

上面的方法似乎完全解决了这个问题。谢谢:))

1 个答案:

答案 0 :(得分:0)

JSON.stringify()将您提供的对象更改为字符串(可以非常容易地存储)。但是:您无法通过string.key

导航该字符串

要将该json字符串转换回对象(可以再次导航),您需要使用JSON.parse()

上面的问题是,您使用密钥game将整个对象(作为json)存储到存储中,然后尝试从存储中获取项game.plutonium。请注意,您没有将任何内容保存为game.plutonium

您需要先通过localStorage.getItem('game')获取整个json字符串,然后将字符串解析回一个对象,然后才能再次像game.plutonium那样导航它。

var game = JSON.parse(localStorage.getItem('game'))
var plutonium = game.plutonium;