2010-12-10 92 views
2

我在JavaScript中閱讀Javascript對象

var result = { 
    'org.apache.struts' : '4567ty5y7u8j89hjk789', 
    'firstName' : 'Thorpe', 
    'surName' : 'Obazee' 
} 

下面的代碼當我嘗試讀取結果:

// this works 
sys.puts(result.firstName) // returns Thorpe 
sys.puts(result.surName) // returns Obazee 

問題是當我讀了其他財產

sys.puts(result.org.apache.struts) // return an error 

Error: Expected 'TypeError: Cannot read property 'apache' of undefined

我應該如何閱讀這個以便我可以交流放下我放的信息?

+0

當你說「這有效」時,我假設你沒有複製和粘貼代碼,因爲你的對象字面值不應該使用'='符號來區分名稱和值(它應該是一個':')。 – 2010-12-10 10:48:13

+1

@Andy E.哈哈。對於那個很抱歉 。我正在寫而不是看代碼。固定。 – 2010-12-10 10:58:12

回答

9

您可以使用bracket notation訪問其名稱包含點符號無效字符屬性:

result["org.apache.struts"] 

如果您想進一步的水平添加到您的對象,以便您可以使用點符號,你需要聲明另一個對象爲每個級別,例如:

var result = { 
    org: { apache: { struts: '4567ty5y7u8j89hjk789' } }, 
    firstName: 'Thorpe', 
    surName: 'Obazee' 
} 

alert(result.org.apache.struts); 
+1

+1 - 進一步閱讀:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators#Bracket_notation – 2010-12-10 10:44:04

+0

@Downvoter:小心解釋我的答案有哪些不正確的地方? – 2010-12-10 10:53:24

3

的問題是,您要添加它作爲一個整體,而不是關鍵的另一個目的,訪問它像result['org.apache.struts']

或者你也可以改變你創建結果的方式:

var result = { 
    org : { 
     apache : { 
      struts : '4567ty5y7u8j89hjk789' 
     } 
    } 
    'org.apache.struts' = '4567ty5y7u8j89hjk789', 
    'firstName' = 'Thorpe', 
    'surName' = 'Obazee' 
} 
2

的問題是,您的變量中有圓點。我想,JavaScript的要求解釋這是嵌套的對象,這是不是真的存在。因此,使用

result["org.apache.struts"] 

以獲得該值。

2

您必須在對象的標籤和值之間使用':',並將'org.apache'定義爲對象。就像這樣:

var result = { 
    org: {apache: {struts: '4567ty5y7u8j89hjk789'}}, 
    firstName: 'Thorpe', 
    surName: 'Obazee' 
} 

如果你想給我們「org.apache.struts」作爲一個真正的標籤,安迪·E公司的回答是解決方案。