localStorage返回NaN(而不是Number,或者什么都没有)
localStorage returning NaN (rather than a Number, or nothing at all)
我一直在尝试让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,如果是,将highscore
和difficulty
存储在localStorage
中。我希望retrieveLocalData()
检查是否支持localStorage,检查highscore
或difficulty
是否分别已存储,如果是,检索值,将它们解析为Int或Float分别与parseInt
和parseFloat
。
测试时,highscore
输出为NaN。
我的期望和假设是否不正确?我不确定为什么会发生这种行为。谢谢。
编辑1:
我删除了所有的localStorage值,并在修改值之前或之后的每个点添加highscore
值中的console.log()
。在进入retrieveLocalData()
之前,该值如预期的那样为0,但是在退出retrieveLocalData()
之后,该值为NaN。
编辑2:
根据apsillers的建议,我将if
语句更改为if(!isNaN(parseInt(localStorage.highscore)))
。代码现在运行正常:)
如果单独测试,您指定的代码可以正常工作。你可能要做的是做一个范围错误,你的highscore
实际上是undefined
,所以试着检查在开发人员工具(F12)的资源选项卡(chrome),在那里你可以检查什么是在本地存储。如果值是不正确的,那么你将需要检查你的storeLocalData
函数,或者它也可能是什么都没有存储的情况,或者如果你在storeLocalData
之前调用你的retrieveLocalData
,那么undefined
首先被检索(作为NaN,由于parseFloat),然后被保存(之后你会陷入循环,所以尝试改变NaN在这种情况下为0和0)。
- javascript或缓存错误?或者其他什么
- 闭包中的本地变量从外部更改.这是一个javascript错误,或者我做错了什么
- jQuery noConflict,或者什么
- Javascript Date.getTime 函数没有返回正确的值,或者我做错了什么
- 什么's在Android中更快:使用loadUrl将数据发送到WebView,或者使用JavascriptInt
- 在JavaScript中,换行符实际上并不是在创建新行,有没有其他选择,或者我做错了什么
- javascript+jquery检查元素是否存在,然后设置其值,或者其他什么
- 我是否错误地使用了eq(…)?或者这里出了什么问题
- 如何访问变量而不是重新声明它?或者还有什么替代方法
- 这真的是异步的吗?或者它发生得太快了,没有什么区别
- 如何知道什么时候所有的承诺都被拒绝了,或者用基本的js承诺解决了
- localStorage返回NaN(而不是Number,或者什么都没有)
- 恶意js ?或者是什么
- Eslint抱怨'new'或者未使用的变量,正确的方法是什么?
- 什么是用来混淆这个Javascript的,或者我如何去模糊它
- 在HTML中使用自定义标记的含义是什么,或者不使用自定义标记有什么优点
- <noscript>或者其他什么
- 使用""有什么区别吗?或者不是javascript对象中的属性
- Nodejs需要严格使用'或者node严格模式的最佳实践是什么
- 什么是字符串,或者它是从哪里来的