我一直在努力让 localStorage
正常工作,但仍然被错误所困扰。我见过几种使用本地存储的方法,并尝试了几种,但没有一种能按预期工作。
我最近的尝试是基于 this example来自 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,如果支持则将 highscore
和 difficulty
存储在 本地存储
。我希望 retrieveLocalData()
检查是否支持 localStorage,检查是否分别存储了 highscore
或 difficulty
,如果是,则检索值,分别使用 parseInt
和 parseFloat
将它们解析为 Int 或 Float。
在测试期间,highscore
输出为 NaN。
我的期望和假设是否不正确?我不确定为什么会发生这种行为。谢谢。
编辑 1:
我删除了所有localStorage的值,并在值修改前后的每个点添加了highscore
值的console.log()
。正如预期的那样,在进入 retrieveLocalData()
之前,该值为 0,但是在退出 retrieveLocalData()
之后,该值为 NaN。
编辑 2:
根据 apsillers 的建议,我将 if
语句更改为 if(!isNaN(parseInt(localStorage.highscore)))
。代码现在工作正常:)
最佳答案
如果单独测试,您指定的代码可以正常工作。您可能正在做的是在您的 highscore
中犯了范围界定错误实际上是 undefined
,因此请尝试检查开发人员工具 (F12) 的资源选项卡 (chrome),您可以在其中检查 localstorage 中的内容。如果那里的值不正确,那么您将需要检查您的 storeLocalData
函数,或者它也可能是什么都没有存储的情况,或者如果你调用你的 retrieveLocalData
就存储了 NaN。在你的 storeLocalData
之前之后undefined
首先被检索(作为 NaN,由于 parseFloat)然后被保存(之后你陷入循环,所以在这种情况下尝试将 NaN 更改为 0 和 0)。
关于javascript - localStorage 返回 NaN(而不是数字,或者什么都没有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15812977/