除了顯而易見的事實,第一種形式可使用變量而不單單是字符串文字,是否有理由在另外一種形式上使用一種?若是是這樣,在哪一種狀況下? app
在代碼中: ide
// Given: var foo = {'bar': 'baz'}; // Then var x = foo['bar']; // vs. var x = foo.bar;
上下文:我已經編寫了一個代碼生成器來生成這些表達式,我想知道哪一種更好。 函數
點表示法不適用於Internet Explorer 8中的某些關鍵字(例如new
和class
)。 ui
我有如下代碼: spa
//app.users is a hash app.users.new = { // some code }
這會觸發可怕的「預期標識符」(至少在Windows XP的IE8上,我沒有嘗試過其餘環境)。 簡單的解決方法是切換到括號符號: code
app.users['new'] = { // some code }
方括號表示法可使用變量,所以在點表示法不起做用的兩種狀況下頗有用: 對象
1)動態肯定屬性名稱時(直到運行時才知道確切名稱)。 ip
2)使用for..in循環遍歷對象的全部屬性時。 字符串
來源: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects get
使用這些符號時要當心:例如。 若是咱們要訪問窗口父級中存在的函數。 在IE中:
window['parent']['func']
不等於
window.['parent.func']
咱們可使用:
window['parent']['func']
要麼
window.parent.func
訪問它
其中[]
符號有用的狀況:
若是您的對象是動態對象,而且鍵中可能有一些隨機值,例如number
和[]
或任何其餘特殊字符,例如-
var a = { 1 : 3 };
如今,若是您嘗試像a.1
這樣訪問,它將遇到一個錯誤,由於它在那兒指望一個字符串。
讓我添加方括號表示法的更多用例。 若是要訪問對象中的屬性(例如x-proxy
,則-
將被錯誤地解釋。 它們還有其餘一些狀況,例如空格,點等,在這種狀況下,點操做將無濟於事。 一樣,若是u在變量中具備鍵,則訪問括號中鍵值的惟一方法是使用方括號表示法。 但願您能得到更多背景信息。