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和[]访问之间应该没有区别,但是您永远不知道...
添加回答
举报