2012-08-23 37 views

回答

4

沒有區別。事實上,在JavaScript作爲一個整體的兩種語法沒有區別:

someObj.someProp === somObj["someProp"]; 

唯一的區別是,某些字符是一個字符串,並以點屬性名有效並不:

someObj["some-prop"] // valid 
someObj.some-prop // this is actually the value of `someObj.some` minus the value of `prop` 

請注意,這兩種存儲localStorage中的值的方法也與使用.getItem.setItem方法相同。根據W3C spec

每個存儲對象提供對鍵/值對,其有時也被稱爲的列表。

這些項目是通過相同名稱的對象屬性或通過使用.getItem.setItem名稱指的他們訪問和可變的。唯一的區別是,這些功能可以被覆蓋,以提供wrappering,例如,以JSON-IFY保存前的對象:

localSotage.setItem = function(key, val) { 
    localStorage[key] = JSON.stringify(val); 
} 
+3

'someObj.someProp === somObj [ 「someProp」];'不正確的,如果值是'NaN'。 TROLOLOLO':P' –

+2

@ŠimeVidas使用'var someObj = {}; Object.defineProperty(someObj,'someProp',{get:function(){return {};}}); 'NaN'比這個更有可能發生; –

+0

@ŠimeVidas雖然我們完全精確,但'localStorage'上的點和括號符號與'set' /'getItem'略有不同:屬性訪問不能持久地將值存儲在共享'localStorage'上原生屬性名稱的鍵中,而函數訪問可以。 'localStorage.setItem =「foo」'行不會導致持久性存儲,而'localStorage.setItem(「setItem」,「foo」)'會。 ':P' – apsillers