问题描述
|
好的,所以我创建了一个使用localStorage的HTML5画布游戏。我的localStorage可以正常运行,但是我不确定它是否遵循正确的标准,或者它是否完全符合我的编写方式。
//check if storage is set already,if not set the variable
function checkLocalStorage(){
if (localStorage.timesPlayed){
timesPlayed = Number(localStorage.timesPlayed);
}
else{
timesPlayed = 0;
}
}
//code snippet to increase my variable
timesPlayed += 1;
//code snippet to set the localStorage
localStorage.timesPlayed = timesPlayed;
这样完美!!但是从我读到的内容来看,我应该使用localStorage.getItem和localStorage.setItem吗?
我应该更改编写localStorage的方式吗?
这只是我学习以这种方式访问localStorage的网站的链接
http://hacks.mozilla.org/2009/06/localstorage/
解决方法
它可以正常工作,并且可能不会中断,但是在使用localStorage时,我仍然会尝试以正确的类型进行转换。
getItem
和setItem
是首选的处理方式,但是让我惊讶的是,您获取和设置值的方法只适用于数字,不适用于任何类型,这意味着您必须谨慎编码\正在使用大量的localStorage。
您正在将一个数字发送到localStorage,并在其中将其转换为字符串。在处理布尔值时,这可能会给您带来很多麻烦,例如:
var won = false;
localStorage.isWinner = won;
if (localStorage.isWinner) { // always true
alert(\"You won!\");
}
数组和对象也变得丑陋:
localStorage.test = {foo: \"bar\",dog: \"cat\"};
// returns \"[object Object]\"
换句话说,您拥有的东西可以工作,但是从一开始就正确正确地进行操作是一个好习惯,因为这将简化以后的调试。正确的方法-适用于字符串,数字,数组,对象-是这样的:
localStorage.setItem(\"key\",JSON.stringify(value));
JSON.parse(localStorage.getItem(\"key\"));
// or as a de facto alternative
localStorage.key = JSON.stringify(value);
JSON.parse(localStorage.key);
, 我不认为ѭ6的数组访问符号是标准的一部分,但是大多数实现的浏览器可能会允许这种可能性。如果要特别小心,请使用getItem
和setItem
-但是就我个人而言,我不认为这是一个问题。
Mozilla说:
尽管可以通过标准JavaScript属性访问方法设置和读取值,但建议使用getItem和setItem方法。
http://dev.w3.org/html5/webstorage/#storage-0
即使该草案中的示例也使用属性访问符号,所以我认为您还可以。
, 对于小型应用程序,直接读写localStorage是可以的,但是我认为在更复杂的应用程序中,最好包装localStorage并为API提供适合特定应用程序的get和set方法(例如get / setMySpecialObject和get / setMySpecialValue)。
我不认为应用程序应该关心数据的存储位置,而应该调用API来获取或设置数据。 API背后的代码说明了如何存储它以及从何处获取它。通常,最有效的方法是在后台读取和写入数据,然后在本地存储中读写。首次请求时从localStorage获取数据并进行缓存。如果在此过程中进行了更新,请适当地写回localStorage,它不需要应用程序发出命令。