为了账号安全,请及时绑定邮箱和手机立即绑定

localStorage.getItem('item')是否优于localStorage.item

localStorage.getItem('item')是否优于localStorage.item

人到中年有点甜 2019-10-17 10:38:04
我最近问了一个有关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 api兼容的一致,标准化和跨浏览器兼容的方式,并且始终应优先于其他方式。- 克里斯多夫我开始喜欢将速记点和方括号表示法用于localStorage,但我很好奇知道其他人对此的看法。localStorage.getItem('item')是否比localStorage.item或localStorage ['item']更好,或者只要它们可以使用速记符号就可以吗?
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

这个问题已经很老了,但是由于我被引用了,所以我想对我的发言说两个字。


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


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


使用数组,您可以执行以下操作:


var a = [1,2,3,4];

a.length // => 4

a.length = 2;

a // => [1,2]

在这里,我们有第一个使用吸气剂/设置器的理由。如果要设置一个名为的项目length怎么办?


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"

对于Storage对象的其他成员,这一点就显得尤为重要,因为它们是可写的,并且您可能会意外覆盖诸如之类的方法getItem。使用API方法可避免任何这些可能的问题并提供一致的接口。


有趣的一点是规范中的以下段落(我强调):


对于失败,setItem()和removeItem()方法必须是原子的。在失败的情况下,该方法不执行任何操作。即,必须成功完成对数据存储区域的更改,或者根本不能更改数据存储区域。


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


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 2411 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号