与直接访问对象属性相比,使用在 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 key order
显然,封装存在一些混淆。看看这个快速的维基百科。但说真的,我希望这个网站的用户知道如何用谷歌搜索。
继续前进,封装是指您制作很少的进出门户以与另一个系统进行通信。假设您正在制作一个API包供其他人使用。假设您在该 API 系统中有一组信息,这些信息会通过用户输入进行更新。您可以让 API 的用户直接将该信息放入数组中......使用该array[key]
方法。或者你可以使用封装。获取将其添加到数组的代码并将其包装在一个函数(例如,asetArray()
或setWhateverMakesSense()
函数)中,API 的用户调用该函数来添加此类信息。然后,在此set
功能中,您可以检查数据是否存在问题,您可以以正确的方式将其添加到数组中,以防您需要以某种方式将其push
编辑或编辑到数组中......等等。你shift
控制来自用户的输入如何进入实际程序。因此,它本身不会增加安全性,但允许您(API 的作者)编写安全性。这也允许更好的版本控制/更新,因为如果您决定进行内部更改,您的 API 用户将不必重写代码。但这无论如何都是好的OOP所固有的。
(因此,为了回应 Natix 在下面的评论......)
这里的javascript和localStorage
对象的例子,他们已经写了这个API,他们是作者,我们是它的用户。如果作者决定改变localStorage
工作方式,那么如果使用了封装方法,就不太可能需要重写代码。但我们都知道,这种程度的变化极不可能发生,至少不会很快发生。而且由于作者在这里没有进行任何固有的不同安全检查,因此,目前,这两种使用localStorage
方式基本上是相同的。这有点像垫片。但是,我们可以轻松地覆盖/替换现有的封装localStorage
来进行我们自己的安全检查。因为 JavaScript 就是这么棒。
PT
我认为它们完全一样,文档中唯一的说明是:
注意:虽然可以使用标准 JavaScript 属性访问方法设置和读取值,但建议使用 getItem 和 setItem 方法。
但是,如果使用完整的垫片,则说明:
使用方法 localStorage.yourKey = yourValue; 并删除 localStorage.yourKey;使用此代码设置或删除密钥不是一种安全的方式 。
和有限的垫片:
此代码不允许使用方法 localStorage.yourKey 来获取、设置或删除密钥。
我看到的最大好处之一是我不必在 JSON.parse() 之前检查一个值是否未定义,因为 getItem() 返回 NULL 而不是 undefined。
只要您不使用像 window.localStorage.key 这样的“点表示法”,您可能就可以了,因为它在 Windows Phone 7 中不可用。我没有使用括号进行测试(您的第二个示例)。就我个人而言,我总是使用 set 和 get 函数(你的第一个例子)。