首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >localStorage.getItem('item')比localStorage.item或localStorage['item']好吗?

localStorage.getItem('item')比localStorage.item或localStorage['item']好吗?
EN

Stack Overflow用户
提问于 2012-09-28 01:38:08
回答 3查看 108.5K关注 0票数 95

我最近问了关于LocalStorage的一个问题。在项目尚未设置时,使用JSON.parse(localStorage.item)JSON.parse(localStorage['item'])无法返回NULL

然而,JSON.parse(localStorage.getItem('item')确实起了作用。事实证明,JSON.parse(localStorage.testObject || null)也能工作。

其中一条评论基本上说,localStorage.getItem()localStorage.setItem()应该永远是首选的:

getter和setter提供了一种与LS兼容的一致、标准化和跨浏览器兼容的方法,应该总是比其他方法更好。-克里斯多夫

我开始喜欢使用localStorage的速记点和括号符号,但我很想知道其他人对此的看法。是localStorage.getItem('item')比localStorage.item或localStorage'item‘or只要它们是速记符号,好吗?

EN

回答 3

Stack Overflow用户

发布于 2014-07-23 07:59:15

这个问题已经很老了,但既然问题中引用了我的话,我想我应该就我的发言说两句话。

Storage对象非常特殊,它是一个对象,它提供对键/值对列表的访问。因此,它不是一个普通的对象或数组。

例如,它有length属性,与数组length属性不同,它是只读的,并返回存储中的键数。

通过数组,您可以:

代码语言:javascript
运行
复制
var a = [1,2,3,4];
a.length // => 4
a.length = 2;
a // => [1,2]

这里我们有第一个使用getter/setter的理由。如果您想设置一个名为length的项,怎么办?

代码语言:javascript
运行
复制
localStorage.length = "foo";
localStorage.length  // => 0
localStorage.setItem("length","foo");
// the "length" key is now only accessable via the getter method:
localStorage.length  // => 1
localStorage.getItem("length") // => "foo"

对于存储对象的其他成员,它甚至更重要,因为它们是可写的,而且您可以意外地覆盖像getItem这样的方法。使用API方法可以防止任何这些可能的问题,并提供一致的接口。

另一个有趣的问题是规范中的以下段落(由我强调):

setItem()和removeItem()方法对于失败必须是原子的。在失败的情况下,什么也不做。也就是说,对数据存储区域的更改必须是成功的,或者数据存储区域必须完全不更改。

理论上说,getter/setter和[]访问之间应该没有区别,但是您永远不知道.

票数 14
EN

Stack Overflow用户

发布于 2013-06-09 09:57:00

我知道这是一篇老文章,但由于没有人真正提到性能,我设置了一些JsPerf测试来对其进行基准测试,getItemsetItem作为一个连贯的接口,也总是比使用点符号或括号更快,而且更容易阅读。

这是我的测试论JsPerf

票数 2
EN

Stack Overflow用户

发布于 2014-03-23 05:45:14

正如前面提到的,除了不存在的键外,几乎没有任何区别。取决于所使用的浏览器/操作系统的性能差异。但这并没有那么大的不同。

我建议您使用标准接口,因为这是推荐的使用方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12632463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档