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

我最近问了一个有关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']更好,或者只要它们可以使用速记符号就可以吗?


人到中年有点甜
浏览 2412回答 3
3回答

不负相思意

这个问题已经很老了,但是由于我被引用了,所以我想对我的发言说两个字。存储对象非常特殊,它是一个对象,它提供对键/值对列表的访问。因此,它不是普通的对象或数组。例如,它具有length属性,与array length属性不同,该属性是只读的,并返回存储中键的数量。使用数组,您可以执行以下操作:var a = [1,2,3,4];a.length // => 4a.length = 2;a // => [1,2]在这里,我们有第一个使用吸气剂/设置器的理由。如果要设置一个名为的项目length怎么办?localStorage.length = "foo";localStorage.length  // => 0localStorage.setItem("length","foo");// the "length" key is now only accessable via the getter method:localStorage.length  // => 1localStorage.getItem("length") // => "foo"对于Storage对象的其他成员,这一点就显得尤为重要,因为它们是可写的,并且您可能会意外覆盖诸如之类的方法getItem。使用API方法可避免任何这些可能的问题并提供一致的接口。有趣的一点是规范中的以下段落(我强调):对于失败,setItem()和removeItem()方法必须是原子的。在失败的情况下,该方法不执行任何操作。即,必须成功完成对数据存储区域的更改,或者根本不能更改数据存储区域。从理论上讲,getter / setter和[]访问之间应该没有区别,但是您永远不知道...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript