2010-07-20 97 views
1

我正在使用Javascript。使用字符串變量的值作爲Javascript中現有對象的'索引'

var myobj = { 
       "one": { 
         "name" : "paul", 
         "no" : "A123" 
       }, 
       "two": { 
         "name" : "mike", 
         "no" : "B456" 
       }, 
       "three": { 
         "name" : "andy", 
         "no" : "C789" 
       }, 
}; 

我還有一個目標newitem,我想插入

var newIndex = "four"; 
var newItem = { 
       "name" : "leo", 
       "no" : "D987" 
       }; 

如何插入newItem到使用newIndex爲 '索引' myobj

順便說一句,newIndex不是由我生成的,所以我不能隨便說myobj.four = newItem;myobj.newIndex = newItem不起作用,因爲它使用單詞「newIndex」爲指標,而不是它的價值。

任何見解?

回答

7

使用括號符號屬性訪問:

myobj[newIndex] = newItem; 

當你要定義其名稱不是一個有效的標識符的屬性,例如它也是有用的:

obj["1foo"] = "bar"; // `obj.1for` will cause a SyntaxError 
obj["a b"] = "bar"; // `obj.a b` will cause a SyntaxError 

注意,你可以甚至使用此屬性訪問器的表達式,例如:

obj[someFunc()] = "foo"; 

它會評估e括號中的表達式,它會將結果轉換爲字符串,因爲JavaScript沒有true散列表,屬性名稱必須是String類型。

更多信息:

+0

注意,在其上基於JavaScript標準的最新版本,它沒有必要用括號符號指由關鍵字命名或保留的屬性時詞語:ECMAScript第5版允許使用'obj.for ='me''。 (一些其他的上下文,比如對象文字中的屬性名稱,也被放寬以允許使用關鍵字。)如果你想使用它,這個改變已經在Firefox中實現了幾年。 – 2010-07-20 08:09:54

+0

@Jeff,是的,忘了提及它,在ES5中'IdentifierName'可以與'.'屬性訪問器一起使用。我會做一個更好的例子... – CMS 2010-07-20 14:31:23

相關問題