2013-07-25 77 views
3

我有這樣的代碼:參考嵌套的JavaScript對象

var string = { 
      nameString : "nameValue", 
      nameString2 : "nameValue2", 
      nameString3 : "nameValue3", 
      datathing : 0, 
     }; 

var data = { 
      data : 1, 
      dataNum2 : 2, 
      dataNum3 : 3, 
      dataNum4 : 4, 
     }; 

var thing = { 
      datathing1 : 10, 
      datathing2 : 20, 
      datathing3 : 30, 
      datathing4 : 40, 
     }; 

var object = { 
      object1 : string, 
      data1 : data, 
      thing1 : thing, 
     }; 

爲什麼沒有這些手段來訪問數據的工作:

alert("testReference= " + object['object1']['string']['nameString']); 
alert("testReference= " + object.object1.string.nameString); 

我無法理解,即使下面找到類似的例子和教科書中明確規定,他們應該工作:

Accessing nested JavaScript objects with string key

預先感謝您的任何意見!

我目前正在構建一個對象並將它傳遞給'in'將會調出值,但'typeof'測試或者其他任何我嘗試訪問的方式都不起作用,要麼我會遇到錯誤(打破了程序,我認爲)或者我得到'undefined'...

如果這個問題得到解決,最後一件事是嵌套一個與其父代相同名稱的鍵,比如數據.data - 這會導致進一步嵌套的可能性,如data.data.data ...

+2

object1沒有「串」屬性...你想反對[「object1」] [「nameString」] – dandavis

+0

該死的你是對的,我想這可能是一個相關的問題,但不能看到我要去的地方在我寫的代碼中出現錯誤! (順便說一下,這不是一個例子,但是我也無法使用類似的構造) – user1360809

回答

2

讓我們看看每個示例有什麼問題,然後查看正確的方式。

例1

object['object1']['string']['nameString']

  1. 我們預計object['object1']返回對象string,對不對?因此,讓我們通過替換它的一部分來簡化大的表達。這會讓我們更容易理解。

  2. 所以現在我們有string['string']['nameString']

  3. 但是string沒有叫'string'的成員,所以string['string']返回undefined

  4. 而當您嘗試將undefined作爲對象時,會出現錯誤!

例2

object.object1.string.nameString

  1. 我們預計object.object1返回對象string,對不對?因此,讓我們通過替換它的一部分來簡化大的表達。這會讓我們更容易理解。我們現在有string.string.nameString

  2. 但是string沒有叫'string'的成員,所以string.string返回undefined

  3. 而當您嘗試將undefined作爲對象時,會出現錯誤!

你想要的

object.object1.nameString(或object['object1']['nameString']

  1. 我們預計object.object1返回對象string,對不對?因此,讓我們通過替換它的一部分來簡化大的表達。這會讓我們更容易理解。

  2. 所以現在我們有string.nameString,而且我們預計要返回"nameValue"

  3. 它確實!