JavaScript屬性訪問:點符號與方括號?

除了顯而易見的事實,第一種形式可使用變量而不單單是字符串文字,是否有理由在另外一種形式上使用一種?若是是這樣,在哪一種狀況下? app

在代碼中: ide

// Given:
var foo = {'bar': 'baz'};

// Then
var x = foo['bar'];

// vs. 
var x = foo.bar;

上下文:我已經編寫了一個代碼生成器來生成這些表達式,我想知道哪一種更好。 函數


#1樓

點表示法不適用於Internet Explorer 8中的某些關鍵字(例如newclass )。 ui

我有如下代碼: spa

//app.users is a hash
app.users.new = {
  // some code
}

這會觸發可怕的「預期標識符」(至少在Windows XP的IE8上,我沒有嘗試過其餘環境)。 簡單的解決方法是切換到括號符號: code

app.users['new'] = {
  // some code
}

#2樓

方括號表示法可使用變量,所以在點表示法不起做用的兩種狀況下頗有用: 對象

1)動態肯定屬性名稱時(直到運行時才知道確切名稱)。 ip

2)使用for..in循環遍歷對象的全部屬性時。 字符串

來源: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects get


#3樓

使用這些符號時要當心:例如。 若是咱們要訪問窗口父級中存在的函數。 在IE中:

window['parent']['func']

不等於

window.['parent.func']

咱們可使用:

window['parent']['func']

要麼

window.parent.func

訪問它


#4樓

其中[]符號有用的狀況:

若是您的對象是動態對象,而且鍵中可能有一些隨機值,例如number[]或任何其餘特殊字符,例如-

var a = { 1 : 3 };

如今,若是您嘗試像a.1這樣訪問,它將遇到一個錯誤,由於它在那兒指望一個字符串。


#5樓

讓我添加方括號表示法的更多用例。 若是要訪問對象中的屬性(例如x-proxy ,則-將被錯誤地解釋。 它們還有其餘一些狀況,例如空格,點等,在這種狀況下,點操做將無濟於事。 一樣,若是u在變量中具備鍵,則訪問括號中鍵值的惟一方法是使用方括號表示法。 但願您能得到更多背景信息。

相關文章
相關標籤/搜索