是否有使用localStorage的对象与直接访问对象的属性上定义的方法的一些具体的好处? 例如,而不是:
var x = localStorage.getItem(key);
localStorage.setItem(key, data);
我一直在做这样的:
var x = localStorage[key];
localStorage[key] = data;
这有什么问题呢?
是否有使用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系统获取用户输入的更新信息的数组。 你可以让你的API的用户可以直接把数组中的信息,...利用array[key]
方法。 或者你可以使用封装。 就拿它添加到阵列的代码和功能包起来(比如, setArray()
或setWhateverMakesSense()
函数),你的API的用户调用添加这种类型的信息。 然后,在这个set
功能,可以检查问题的数据,你可以把它添加到正确的方式排列,如果你需要它push
编辑或shift
以某种方式编到阵列...等。 你控制用户的输入如何进入实际的程序。 所以,它本身并没有增加安全,但允许安全由你来写的,API的作者。 这也可以更好的版本/更新作为API的用户将不必重新编写代码,如果你决定进行内部变革。 但是,这是与生俱来的良好的OOP无论如何。
在这里的JavaScript和情况localStorage
对象,他们已经写了这个API,它们的作者,我们是它的用户。 如果作者决定改变如何localStorage
工作,那么这将是不太可能不得不重写你的代码,如果使用了封装方法。 但是,我们都知道它的极不可能的,将不会发生这种水平的变化,至少没有任何时间很快。 而且,由于作者没有任何内在的不同的安全检查,以使这里,那么,目前,这两种使用方式localStorage
基本上是相同的。 这有点像一个垫片。 但是,我们可以很容易地使我们自己的封装覆盖/替换围绕现有封装localStorage
,使我们自己的安全检查。
PT
我认为他们是完全一样的,唯一documenation规定是:
注意:虽然值可以设置并使用标准的JavaScript属性访问方法来读取,使用的getItem和setItem方法建议。
如果使用的是全垫片,然而,它指出:
使用方法localStorage.yourKey = yourValue; 并删除localStorage.yourKey; 设置或删除关键不是与 此代码 的安全方式 。
和有限的垫片:
为了获取,设置或删除键的使用方法localStorage.yourKey的是不是跟这个代码许可 。
其中一个我看到的最大好处是,我没有),以检查是否值我JSON.parse之前未定义或不(它,因为getItem()时,而不是未定义返回NULL。
只要你不使用“点号”像window.localStorage.key你可能是OK的,因为它不是在Windows Phone 7的,我没有使用括号测试(你的第二个例子)可用。 我个人一直使用set和get功能(你的第一个例子)。