javascript - localStorage 返回 NaN(而不是数字,或者什么都没有)

标签 javascript html

我一直在努力让 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,如果支持则将 highscoredifficulty 存储在 本地存储。我希望 retrieveLocalData() 检查是否支持 localStorage,检查是否分别存储了 highscoredifficulty,如果是,则检索值,分别使用 parseIntparseFloat 将它们解析为 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/

相关文章:

javascript - 检查当前窗口是否由 javascript 打开

Javascript 相等声明

CSS div 宽度 - 仅内容宽度..?

javascript - 从数组添加 JQGrid 中的列属性

html - 如何在我的 HTML 文件中使用此 CSS 动画?

javascript - 我是否必须为每个页面创建一个新面板?

javascript - 如何显示 DataTable JQuery 的长度菜单?

javascript - CKEDITOR 在 IE 上 getElementsByTag 时丢失自定义节点

javascript - 控制台日志是否已选中复选框?

javascript - 如何将 for 循环中的每个项目添加到 ReactJS 数组中