1

我一直在努力localStorage工作,但仍然受到错误的困扰。我已经看到了几种使用本地存储的方法,并尝试了几种,但都没有按预期工作。

我最近的尝试是基于W3Schools 的这个例子,但它似乎也不起作用。

var difficulty = 0;
var highscore = 0; 

function retrieveLocalData() {
    if(typeof(Storage)!=="undefined") {
        if(localStorage.highscore) { highscore = parseInt(localStorage.highscore); }
        if(localStorage.difficulty) { difficulty = parseFloat(localStorage.difficulty); }
    }
}

function storeLocalData() {
    if(typeof(Storage)!=="undefined") {
        localStorage.highscore = highscore; 
        localStorage.difficulty = difficulty; 
    }
}

我希望storeLocalData()检查是否支持 localStorage,如果支持,则将highscoreand存储difficultylocalStorage. 我希望retrieveLocalData()检查是否支持 localStorage,检查是否highscoredifficulty分别已存储,如果是,则检索值,分别使用parseInt和将它们解析为 Int 或 Float parseFloat

在测试期间,highscore输出为 NaN。

我的期望和假设不正确吗?我不确定为什么会发生这种行为。谢谢。


编辑1:

我删除了所有 localStorage 值,并在修改值之前或之后添加console.log()highscore每个点的值。正如预期的那样,在输入之前retrieveLocalData()的值是 0,但是在退出之后retrieveLocalData()的值是 NaN。

编辑2:

我根据 apsillers 的建议更改了我的if声明。if(!isNaN(parseInt(localStorage.highscore)))代码现在工作正常:)

4

1 回答 1

2

如果单独测试,您指定的代码可以正常工作。您可能正在做的是在highscore实际位置上犯了范围错误undefined,因此请尝试检查开发人员工具 (F12) 的资源选项卡 (chrome),您可以在其中检查本地存储中的内容。如果那里的值不正确,那么您将需要检查您的storeLocalData函数,或者也可能是尚未存储任何内容的情况,或者如果您在调用您retrieveLocalData之前调用了您的storeLocalData之后,则存储了字面上的 NaN undefined(作为 NaN,由于parseFloat) 和 next 被保存(之后你会陷入循环,所以尝试在这种情况下将 NaN 更改为 0 和 0)。

于 2013-04-04T13:47:22.490 回答