2012-12-29 254 views
2

可能重複:
JavaScript property access: dot notation vs. brackets?訪問屬性

<script>  
    var foo = {   
    name: 'kevin'   
    }; 

    document.write(foo.name); 
    document.write(foo['name']); 

    var cool = 'name'; 
    document.write(foo.cool); 

    document.write(foo[cool]);  
</script> 
  1. 爲什麼foo.cool返回我不確定哪裏爲foo[cool] returns me kevin
  2. cool如何在foo對象中實際引用我的名稱屬性。
+3

因爲當對象屬性是一個表達式時,使用'[]'表示法,就像變量'cool'(或者包含無法用'.'表示法的字符)。如果使用'.'表示法,則該屬性不能是表達式的結果。 –

回答

4
  1. cool屬性不上foo定義,因此foo.cool是未定義的。如果您的確輸入了foo.name,則會返回kevin

  2. foo[cool]cool是你在它上面的行中定義的一個,因此它實際上是foo['name'],其定義和具有值kevin。由表達式計算結果爲他們的名字property.name

  3. 間接:property[expr]

+0

但var cool ='name'是一個字符串變量。JS如何將它與只用[]符號調用的foo對象相關聯。 – Kevin

+0

@凱文 - 它沒有。您正在訪問具有標籤'name'的'foo'的屬性,但正在傳遞包含該值的變量(即變量'cool'包含值'name')。 'name'是關聯的。 – Oded

1

您可以訪問屬性要麼...

  • 字面上他們的名字。

因此,如果表達式cool具有值'name',然後foo[cool]相同foo['name']foo.name

擋片還可以允許...

1)更復雜的表達式像foo["data_"+variable]輕鬆訪問名爲像data_something領域,
2)屬性名稱不屬於簡單的標識符,例如,你可以說foo["I'm long!"]

我希望這個解釋能夠爲您增添亮點。

1

In var foo = {name:'kevin'};您將對象或字典存儲到該變量...現在是鍵值對...因此您可以使用該鍵訪問對象的值...

因爲它是一個鍵值對。 ..你無法使用'。'來訪問它。運營商...因爲foo是不是一類... FOO的類型將是一個字典或對象......

因此,訪問值,你需要使用[] paranthesis ...