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

Javascript localStorage-使用getItem/setItem函数还是直接访问对象?,javascript,local-storage,Javascript,Local Storage,与直接访问对象属性相比,使用localStorage对象上定义的方法是否有一些好处?例如,而不是: var x = localStorage.getItem(key); localStorage.setItem(key, data); 我一直在这样做: var x = localStorage[key]; localStorage[key] = data; 这有什么问题吗?我认为它们完全一样,唯一的区别是: 注:虽然可以使用标准设置和读取值 JavaScript属性访问方法,使用getIte

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

var x = localStorage.getItem(key);
localStorage.setItem(key, data);
我一直在这样做:

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

这有什么问题吗?

我认为它们完全一样,唯一的区别是:

注:虽然可以使用标准设置和读取值 JavaScript属性访问方法,使用getItem和setItem 推荐使用这些方法

但是,如果使用全垫片,则说明:

方法localStorage.yourKey=yourValue的使用;删除 localStorage.yourKey;使用 此代码

和有限的垫片:

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


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

另一种方法允许在名称(键)未知时以及在数组和循环中更好地使用。使用
.key()
.length
迭代存储项,而不知道它们的实际键名

我发现这是一个很好的资源:

这个问题也可能为一些人提供更多的见解:

增编: 显然,关于封装存在一些混乱。快来看看这个。但说真的,我希望这个网站的用户知道如何使用谷歌

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

(因此,针对以下Natix的评论…)

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


PT

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

只要不使用window.localStorage.key等“点符号”,您可能就可以了,因为它在Windows Phone 7中不可用。我没有使用括号进行测试(您的第二个示例)。就我个人而言,我总是使用set和get函数(您的第一个示例)。

我认为它们完全相同。localStorage是全局的,所以如果您想多次访问它,您应该在local var中缓存属性。@gurpreitsingh-huh?这和问题有什么关系抱歉,我的意思是localStorage是全局的,所以如果您想多次访问它,我想提供的函数可能会有性能优势。正如我所说的,可能是重复的,一个使用封装(getter/sitter)。。。所以这应该是显而易见的。。它是以“get”或“set”开头的函数。。。如果您理解封装。另一种是使用
.key()
.length
进行迭代的方式。那么,如果这些方法基本上完全相同,它们如何更好地保护数据和提高安全性呢?我不确定缺少这些信息是否值得投反对票。在这里鉴于这不是OP的要求,正如我所说,答案是……不是真的。javascript的这两种方式没有任何真正的本质安全性差异。将所有内容发送到函数(封装)的术语允许该事务的门户。如果您愿意,可以重写该门户。。这远远超出了这一背景。但这一控制水平如何用于提高安全性应该是显而易见的。假设你知道封装,这是显而易见的。不完全一样,getter返回
null
,而对于缺少的键,直接对象属性返回
undefined
。在使用localstorage时,应始终使用try/catch块包装
JSON。因为返回的值不可靠,可能无法解析