使用localStorage对象上定义的方法与直接访问对象属性有什么好处?例如,而不是:
var x = localStorage.getItem(key);
localStorage.setItem(key, data);
我一直这样做:
var x = localStorage[key];
localStorage[key] = data;
这有什么问题吗?
答案 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函数(你的第一个例子)。