0

以最简单的形式:

localStorage.setItem('index0', JSON.stringify(playerInventory[lootArray[0]]));

var retrievedIndex0 = localStorage.getItem('index0');
console.log('retrieved0:'+retrievedIndex0 );  //Displays correct amount

所以我认为它正在工作,但是如果我在使用 getItem 之前没有立即 setItem,它会返回 null,或者如果我 setItem,按 F5,'index0' 将变为 null ...

if(localStorage.getItem('index0') <  playerInventory[lootArray[0]]) { 
console.log('bingo! '); 
localStorage.setItem('index0', JSON.stringify(playerInventory[lootArray[0]])); }

此 ^ 将输出“宾果!” 进入日志(在Firefox中),但setItem不更新localStorage。如果我重玩游戏,如果我在 getItem 之前不再次 setItem,它将为 null ...

这也将正确触发...

var oldscore = localStorage.getItem('index0');
var newscore = playerInventory[lootArray[0]]; 
if(oldscore < newscore) { console.log('new high score');}

但是 setItem 不会更新 localStorage ....如果我按 f5 并重玩游戏,它将为空

if(oldscore < newscore) { 
console.log('new high score'); //This fires

localStorage.setItem('index0', JSON.stringify(playerInventory[lootArray[0]])); //this doesnt
}

如果我进入我的主 update() 循环,然后输入:

console.log(localStorage.getItem('index0')); //returns null
console.log(localStorage.getItem.index0);  //returns undefined

有人发现有什么问题,或者我可以做任何其他测试吗?

playerInventory[lootArray[0]] 持有我想与 localstorage 比较的数字,并在它更高时更新到 localstorage....我使用该对象用当前值更新屏幕上的 div,所以我知道它持有我要保存/恢复的整数..........................

我刚刚在 IE 中进行了测试,但它根本不起作用。错误:即使是这篇文章顶部的基本第一部分也会引发错误。

SCRIPT5007:无法获取属性“getItem”的值:对象为空或未定义

我可以在使用 getItem 之前在同一个函数中设置项目,此时它显然不是空的,但它不会持续超过那个点......

4

1 回答 1

0

当我在做一个项目时,我遇到了与此错误类似的问题。我注意到当我试图只运行我的文件时,我会不断收到 null 或 undefined 的错误。一旦我把我的项目放在服务器上,它就可以工作了。

此外,您已经有一个用于检索索引的变量。尝试使用它进行检查,然后,如果分数更高,则设置新分数,如果不是,则将检索到的索引设置回本地存储。

IE 的注意事项,如果您在尝试 getItem 时遇到错误,IE 将不会传递当前方法/函数中的错误。尝试在 IE 中获取项目时,请尝试捕获它。我希望这会有所帮助。

另外,尝试使用

localStorage.setItem('index0', JSON.stringify(newscore));

因为您已经创建了变量。

于 2012-02-10T18:49:52.093 回答