localStorage返回NaN(而不是数字,或者根本没有)

时间:2013-04-04 13:40:13

标签: javascript html5

我一直试图让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,如果是,请将highscoredifficulty存储在localStorage中。我希望retrieveLocalData()检查是否支持localStorage,分别检查是否已存储highscoredifficulty,如果已存储,则检索这些值,将它们解析为Int或Float分别与parseIntparseFloat

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

我的期望和假设是否不正确?我不确定为什么会出现这种情况。谢谢。


编辑1:

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

编辑2:

根据apsillers的建议,我将if语句修改为if(!isNaN(parseInt(localStorage.highscore)))。代码现在正常工作:)

1 个答案:

答案 0 :(得分:2)

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