我一直试图让localStorage
工作,但仍然会受到错误的困扰。我已经看到了几种使用本地存储的方法,并尝试了几种,但没有一种方法可以按预期工作。
我最近的尝试是基于W3Schools的this example,但它似乎也没有用。
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
存储在localStorage
中。我希望retrieveLocalData()
检查是否支持localStorage,分别检查是否已存储highscore
或difficulty
,如果已存储,则检索这些值,将它们解析为Int或Float分别与parseInt
和parseFloat
。
在测试期间,highscore
输出为NaN。
我的期望和假设是否不正确?我不确定为什么会出现这种情况。谢谢。
编辑1:
我删除了所有localStorage值,并在修改值之前或之后的每个点添加了console.log()
的值highscore
。在输入retrieveLocalData()
之前,正如预期的那样,值为0,但在退出retrieveLocalData()
后,该值为NaN。
编辑2:
根据apsillers的建议,我将if
语句修改为if(!isNaN(parseInt(localStorage.highscore)))
。代码现在正常工作:)
答案 0 :(得分:2)
如果您自己进行了测试,则指定的代码可以正常工作。您可能正在做的是在highscore
实际为undefined
时出现范围错误,因此请尝试检查开发人员工具(F12)资源选项卡(chrome),您可以在其中检查本地存储中的内容。如果值不正确,那么您将需要检查storeLocalData
函数,或者也可能是尚未存储任何内容的情况,或者如果您在retrieveLocalData
之前调用storeLocalData
,则会存储字面上的NaN {1}}之后undefined
首先被检索到(因为NaN,由于parseFloat),然后被保存(之后你被卡在循环中,所以尝试在这种情况下将NaN更改为0和0)。