2011-08-18 71 views
4

我一直在使用Javascript中的方括號表示法來創建和調用關聯數組。如何在點符號中使用變量,如方括號表示法

在本例中,我明白方括號表示法允許您使用變量來調用數組中的某個對象。

你會如何在點符號中做這樣的事情?

var item = {}; 
    item['1'] = 'pen'; 

var x = 1; 

console.log(item[x]); // console will show 'pen' 

回答

19

不能使用以點表示變量(短使用eval,你想要做的)。使用點符號,屬性名稱本質上是一個常量。

myObj.propName 
// is equivalent to 
myObj["propName"] 
+1

-1因爲它是錯誤的。看到我的答案。第一行中的'propName'被視爲屬性,而不是變量! – sjngm

+3

@sjngm我不同意。@nnnnnn並不意味着'propName'是一個變量,而是一個屬性的名稱。 –

+0

@zack好吧,然後一個不同的名字會更好。它說「等同於」意味着第一行與第三行完成相同的事情。這不是事實。 – sjngm

6

如果用數字來訪問你必須數組使用括號:

item[0] 

var k = 0; 
item[k] 

item.0 

不起作用(錯誤的語法)。

如果你使用一個字符串

item["key"] 

var p = "key"; 
item[p] 

等於

item.key 

在後一種情況下

var p = "key"; 
item.p 

會導致錯誤的輸出p不作爲變量這裏治療。

+0

謝謝,我沒有具體詢問一個數字,我只是沒有想到一個更好的標識符。但是,這也是瞭解數字的好消息。 –

2

點符號僅限於某些字符...看到this question ......在方括號可以讓你打破限制:

var item = {}; 
item['very long variable name containing empty spaces ... and dots...'] = 'valid var'; 
item.1 = 'not valid var'; // will not work; 
item['1'] = 'valid var'; // will do just fine... 
6

簡短的回答是:你不能訪問除非您知道酒店的名稱,否則酒店將使用dot notation

點符號還會限制您可以訪問的屬性名稱,因爲屬性名稱必須是有效的JavaScript標識符。例如,如果您有一個名爲my prop(或更好,my%prop)的屬性,則不可能在不使用bracket notation的情況下訪問它,因爲這會導致大多數情況下出現語法錯誤。

Member Operators page on MDN解釋了這一點。

順便說一句:

豈不是有點混亂,以便能夠動態地查找使用點符號屬性?

item.x // is this the property "x" or do I have to look up variable "x"? 
+0

感謝您的參考鏈接。是的,現在我想到了,這會讓人困惑。我只是不知道是否有辦法。 –

相關問題