【发布时间】:2012-09-19 21:26:09
【问题描述】:
我最近问过a question about LocalStorage。当项目尚未设置时,使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item']) 无法返回 NULL。
但是,JSON.parse(localStorage.getItem('item') 确实有效。事实证明,JSON.parse(localStorage.testObject || null) 也有效。
One of the comments 基本上说localStorage.getItem() 和localStorage.setItem() 应该总是首选:
getter 和 setter 提供了一致的、标准化的和 使用 LS api 的跨浏览器兼容方式,并且应该始终 优于其他方式。 -Christoph
我开始喜欢对 localStorage 使用速记点和括号表示法,但我很想知道其他人对此的看法。 localStorage.getItem('item') 是否比 localStorage.item 或 localStorage['item'] 更好,或者只要它们有效,速记符号就可以了吗?
【问题讨论】:
-
我相信克里斯托夫已经把他的推理说得很清楚了。
getItem和setItem是 standardised 的做事方式。 -
我明白了。略过这些建议太困了,但由于这个 webstorage API 相对较新,我个人会坚持使用正确记录的
getItem/setItem方法。稍后我会再次阅读规范,但回答您的问题的唯一防故障方法是在所有主要浏览器上进行整个测试。 -
规范说“存储对象上支持的属性名称是当前存在于与该对象关联的列表中的每个键/值对的键。”这不是让
localStorage.item也标准化了吗? -
@Barmar 回复有点晚,但是在看到这么多这个问题的傻瓜并回到这里之后,我会回复你是绝对正确的。但是,我会再次推荐使用
getItem/setItem,因为这些方法不会与localStorage对象的现有属性冲突。示例:localStorage.setItem('getItem', 'blah'); console.log(localStorage.getItem('getItem'));有效,而localStorage.getItem = 'blah';将覆盖 localStorage 的getItem方法。 jsfiddle.net/DrquY -
我还没有看到任何支持我的方法的论据。像往常一样使用名称/值对。当我们使用 get/set 方法时,另一个给我们空值。我想如果我要与另一个具有 null 的可选值的值列表进行比较,一个值会比另一个更有意义,但是当它们都在规范中时说一个或另一个是“首选”是愚蠢的,IMO。提供这两种方法都是有原因的。
标签: javascript syntax local-storage