3 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
這個(gè)問(wèn)題已經(jīng)很老了,但是由于我被引用了,所以我想對(duì)我的發(fā)言說(shuō)兩個(gè)字。
存儲(chǔ)對(duì)象非常特殊,它是一個(gè)對(duì)象,它提供對(duì)鍵/值對(duì)列表的訪問(wèn)。因此,它不是普通的對(duì)象或數(shù)組。
例如,它具有l(wèi)ength屬性,與array length屬性不同,該屬性是只讀的,并返回存儲(chǔ)中鍵的數(shù)量。
使用數(shù)組,您可以執(zhí)行以下操作:
var a = [1,2,3,4];
a.length // => 4
a.length = 2;
a // => [1,2]
在這里,我們有第一個(gè)使用吸氣劑/設(shè)置器的理由。如果要設(shè)置一個(gè)名為的項(xiàng)目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"
對(duì)于Storage對(duì)象的其他成員,這一點(diǎn)就顯得尤為重要,因?yàn)樗鼈兪强蓪懙?,并且您可能?huì)意外覆蓋諸如之類的方法getItem。使用API方法可避免任何這些可能的問(wèn)題并提供一致的接口。
有趣的一點(diǎn)是規(guī)范中的以下段落(我強(qiáng)調(diào)):
對(duì)于失敗,setItem()和removeItem()方法必須是原子的。在失敗的情況下,該方法不執(zhí)行任何操作。即,必須成功完成對(duì)數(shù)據(jù)存儲(chǔ)區(qū)域的更改,或者根本不能更改數(shù)據(jù)存儲(chǔ)區(qū)域。
從理論上講,getter / setter和[]訪問(wèn)之間應(yīng)該沒(méi)有區(qū)別,但是您永遠(yuǎn)不知道...
添加回答
舉報(bào)