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

在localStorage对象上使用提供的函数有什么好处,而不是直接访问对象属性? 例如,而不是:

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

我一直在这样做:

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

这有什么不对吗?

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

另一个允许更好地使用名称(键)未知的数组和循环。 使用.key().length来遍历您的存储项目,而不必知道它们的实际密钥名称。

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

这个问题也可以提供一些更深入的了解: HTML5 localStorage密钥顺序

附录:

很明显,关于封装有一些混淆。 看看这个快速的维基百科 。 但严重的是,我希望本网站的用户知道如何谷歌。

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

在javascript和localStorage对象的情况下,他们已经编写了这个API,他们是作者,我们是它的用户。 而且由于作者在这里没有任何固有的安全检查,所以这两种使用localStorage方法基本相同。 但是,我们可以很容易地使自己的封装来覆盖/replacelocalStorage周围的现有封装来做出我们自己的安全检查。

PT

我认为他们是完全一样的,文件说明的唯一的是:

注意:虽然可以使用标准的JavaScript属性访问方法设置和读取这些值,但build议使用getItem和setItem方法。

如果使用全垫片,则表示:

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

和有限的垫片:

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

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

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