访问localStorage的最佳方法
Best approach to access localStorage
在整个网络中,我看到了3种方法来保存和检索localStorage
的数据:
//As an array
localStorage["key"] = "value";
var value = localStorage[key];
//As an object, using properties
localStorage.key = value;
var value = localStorage.key;
//As an object, using getter and setter functions
localStorage.setItem("key", "value");
var value = localStorage.getItem("key");
据我所知,前两个是等效的,因为JavaScript中的数组被视为对象。
第三种方法似乎是最好的方法,因为使用getter和setter可以封装函数的逻辑,也可以扩展。
我希望能得到更多的见解,有人能给点建议吗?
EDIT:这个问题的原因来自localStorage不仅仅是一个数组,所以我正在寻找明确针对localStorage和它的实现的意见。
我觉得你的理解完全正确。javascript奇怪的特性可能会让您感到困惑。在javascript中,所有东西都是对象,每个对象本质上都可以被视为哈希映射,因此前两个例子是等效的。最后两个示例实际上也是等效的,因为它们只是本地存储对象的函数成员。由于所有的例子都有相同的效果,我想说最重要的是保持代码的一致性,使其更具可读性。
请记住,数组也是一个对象,可以这样处理
对对象属性的括号访问和点访问之间的区别只是语言的方便。直接访问属性和使用getter/setter方法之间的区别很有趣。
规格说明:
"存储对象上支持的属性名是当前存在于与该对象关联的列表中的每个键/值对的键。"
这告诉我直接访问是完全合法的。也就是说,所有实现该规范的用户代理都应该支持它。
至于哪个更好。我不确定这是不是规范的目的。它不能说明特定的用户代理实现如何由于其内部工作而偏向于一种方法或另一种方法。规范实际上只是定义了接口。
例如,如果特定用户代理中的直接属性访问只是在内部调用getter/setting方法,那么使用这些方法可能会有性能上的好处。
我个人会使用这些方法,但是将我应用程序中的功能抽象为一个简单的函数,如果需要的话,我可以稍后交换。例句:
function getLocal( key ){
return localStorage.getItem(key);
}
如果因为某种原因我发现了这个问题,或者需要支持旧的浏览器(比如,退回到常规的cookie),我可以在一个地方改变我的应用程序。我知道这不是你的问题,但这就是。
我是这样用的
function setLocalObj(id, obj){
if(id && obj)
localStorage[id] = JSON.stringify(obj);
}
function getLocalObj(id){
if(localStorage[id])
return JSON.parse(localStorage[id]);
}
function removeLocalObj(id){
if(localStorage[id])
localStorage.removeItem(id);
}
var myObj = {
'val':10,
'str': 'hi there'
}
setLocalObj('myObj', myObj);
- 有条件更新d3.js力图中节点的最佳方法
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 从数组中删除元素的最佳方法是:javascript/jquery
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 列出没有 mysql 的元素的最佳方法是什么
- 在jquery库中重新定义方法的最佳方法
- Javascript,用vars创建对象的最佳方法
- 使用 jQuery 从 HTML 中获取某些值的最佳方法
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用jasmine测试JavaScriptUI的最佳方法
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 在 JavaScript 中获取范围的随机数的最佳方法
- 在对象类上实现 jquery 作用域的最佳方法
- 将同步函数包装到承诺中的最佳方法是什么?