JavaScript localStorage NaN错误

时间:2015-12-23 22:39:36

标签: javascript html5

我正在用html和JavaScript制作游戏。我使用localStorage在游戏中加入了一个保存系统。当我从电脑上打开html文件时,一切都很顺利。所有东西都保存在localStorage中,一切都完美地加载......但是当我将文件上传到我的网站时,游戏所在的每个值都有NaN ...我知道这意味着不是数字,但我不明白。为什么这可以在我的电脑上运行而不能在我的网站上运行?

这是游戏的保存和加载部分!

Game

我一直在想是因为我无法到达localStorage?请帮助我,我真的需要这个,我一直试图找到答案。

1 个答案:

答案 0 :(得分:4)

问题

您的检查以确保您的localStorage值无效:

if(typeof(localStorage.getItem("game_saved_before")) != undefined){

getItem返回nulltypeof(null)object

因此,您的所有其他来电都可以评估为parseInt(null) NaN

立即解决方案

直接修复将是:

if(localStorage.getItem("game_saved_before") !== null){

或:

if(localStorage["game_saved_before"] !== undefined){

或:

if(typeof(localStorage.getItem("game_saved_before")) === "string"){

但是你必须确保localStorage.clear()摆脱所有属性为" NaN"。

添加版本控制

我认为您已经遇到了可以通过版本控制避免的旧配置问题:

var save_format=1; // increment on breaking save format changes

save()
   localStorage.setItem("game_saved_before", save_format)
...

load_game()
   if(parseInt(localStorage.getItem("game_saved_before")) === save_format){
...

这种方法的一个缺点是你仍在零碎地保存东西,因此一个版本的遗留属性最终可能会与未来的版本共存,除非你使用removeItem