localStorage - 直接使用getItem / setItem函数或访问对象?

时间:2012-10-26 18:52:43

标签: javascript local-storage

使用localStorage对象上定义的方法与直接访问对象属性有什么好处?例如,而不是:

var x = localStorage.getItem(key);
localStorage.setItem(key, data);

我一直这样做:

var x = localStorage[key];
localStorage[key] = data;

这有什么问题吗?

4 个答案:

答案 0 :(得分:28)

不是,它们基本上完全一样。一个使用封装(getter / setter)来更好地保护数据和简单使用。你应该使用这种风格(为了安全起见)。

另一个允许在名称(键)未知时以及数组和循环时更好地使用。使用.key().length在不知道实际密钥名称的情况下迭代存储项目。

我发现这是一个很好的资源:http://diveintohtml5.info/storage.html

此问题可能会为某些人提供更多见解:HTML5 localStorage key order

附录:

显然,封装存在一些混乱。快速查看Wikipedia。但严重的是,我希望这个网站的用户知道如何谷歌。

继续前进,封装是一种想法,即您可以使用少量进出门户与另一个系统进行通信。假设您正在制作API个包以供其他人使用。假设您在该API系统中有一系列信息,可通过用户输入进行更新。您可以使用array[key]方法让API的用户直接将该信息放入数组中。或者你可以使用封装。获取将其添加到数组中的代码,并将其包装在API调用的函数中(例如,setArray()setWhateverMakesSense()函数),以添加此类信息。然后,在此set函数中,您可以检查问题的数据,您可以以正确的方式将其添加到数组中,以防您需要push ed或shift以某种方式排列...等等。 控制用户输入如何进入实际程序。因此,它本身不会增加安全性,但允许您(API的作者)编写安全性。这也允许更好的版本控制/更新,因为如果您决定进行内部更改,API的用户将不必重写代码。但无论如何,这是好OOP所固有的。

(因此,回应下面的Natix评论......)

在javascript和localStorage对象的情况下,他们已经编写了这个API,他们是作者,我们是它的用户。如果作者决定改变localStorage的工作方式,那么如果使用封装方法,则不太可能重写代码。但我们都知道这种变化水平不太可能发生,至少不会很快发生。由于作者在此处没有任何固有的不同的安全检查,因此,目前,这两种使用localStorage的方式基本相同。它有点像垫片。但是,我们可以轻松覆盖/替换localStorage周围的现有封装,以进行自己的安全检查。因为JavaScript真是太棒了。

PT

答案 1 :(得分:9)

我认为它们完全相同,documenation唯一的状态是:

  

注意:尽管可以使用标准设置和读取值   JavaScript属性访问方法,使用getItem和setItem   方法是推荐的。

但是,如果使用完整填充程序,则表明:

  

使用方法localStorage.yourKey = yourValue;并删除   localStorage.yourKey;设置或删除密钥不是一种安全的方式    此代码

和有限的垫片:

  

使用方法localStorage.yourKey来获取,设置或删除   此代码不允许使用密钥

答案 2 :(得分:3)

我看到的最大好处之一是我在JSON.parse()之前不必检查值是否未定义,因为getItem()返回NULL而不是undefined。

答案 3 :(得分:0)

只要您不使用像window.localStorage.key这样的“点符号”,您就可以了,因为它在Windows Phone 7中不可用。我没有使用括号测试(您的第二个示例)。我个人总是使用set和get函数(你的第一个例子)。