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

新手上路,请多包涵

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

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

我一直在这样做:

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

这有什么问题吗?

原文由 DisgruntledGoat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 535
2 个回答

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

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

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

这个问题也可能为某些人提供更多见解: HTML5 localStorage key order

附录:

显然对封装存在一些混淆。查看这个快速的 维基百科。但说真的,我希望这个网站的用户知道如何谷歌。

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

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

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

PT

原文由 Pimp Trizkit 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为它们完全相同,文档中 唯一 说明的是:

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

但是,如果使用完整的垫片,它会指出:

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

和有限的垫片:

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

原文由 jbabey 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题