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

Dis*_*oat 47 javascript local-storage

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

var x = localStorage.getItem(key);
localStorage.setItem(key, data);
Run Code Online (Sandbox Code Playgroud)

我一直这样做:

var x = localStorage[key];
localStorage[key] = data;
Run Code Online (Sandbox Code Playgroud)

这有什么不对吗?

Pim*_*kit 30

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

另一个允许在名称(键)未知时以及数组和循环时更好地使用.使用.key().length迭代存储项而不知道其实际的键名.

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

这个问题可能会提供更多的见解:HTML5 localStorage键盘顺序

附录:

显然,封装存在一些混乱.看看这个快速的维基百科.但严重的是,我希望这个网站的用户知道如何谷歌.

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

在javascript和localStorage对象的情况下,他们已经编写了这个API,他们是作者,我们是它的用户.如果作者决定改变localStorage工作方式,那么如果使用封装方法,则不太可能重写代码.但我们都知道这种变化水平不太可能发生,至少不会很快发生.由于作者在此没有任何固有的不同安全检查,因此,目前,这两种使用localStorage方式基本相同.它有点像垫片.但是,我们可以轻松地进行自己的封装来覆盖/替换现有的封装,localStorage以进行自己的安全检查.

PT

  • 正如我所说,一个人使用封装(getter/sitter)......所以应该是显而易见的..它的功能以"get"或"set"开头......如果你理解封装.另一种是使用`.key()`和`.length`进行迭代的方式. (2认同)
  • 那么,如果方法基本上是完全一样的,那么如何更好地保护数据并提高安全性呢? (2认同)

jba*_*bey 9

我认为他们是完全一样的,唯一documenation规定是:

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

但是,如果使用完整的垫片,则说明:

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

和有限的垫片:

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


Hin*_*ron 5

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