2013-02-06 47 views
0

的子屬性我想是這樣的:JS:動態創建不存在財產

var myObj = {}; 
myObj["a"]["b"].push({"c":"d"}); 

我想MyObj中成爲:{"a":{"b":[{"c":"d"}]}},但我得到一個錯誤

無法設置屬性「B」未定義

是的,我知道我可以創建它一步一步這樣的:

var myObj={}; 
myObj["a"]={}; 
myObj["a"]["b"]=[]; 
myObj["a"]["b"].push({"c":"d"}); 

但是,如果myObj已經有一些結構,我不想銷燬它。例如:

var myObj={"a":{"e":"f"}}; 

如果我寫myObj["a"]={};我會丟失數據。
當然,我可以寫

if(myObj["a"]==null){ 
myObj["a"]={} 
} 

但它太笨重!如果我可以像myObj["a"]["b"].push({"c":"d"});那樣寫出像沒有檢查每一步中的空值那將是非常好的。
任何建議如何做到這一點?可能有一種方法來重寫JS本地對象或像這樣的嗎?
預先感謝您!

+2

你可以簡化檢查 - >'MyObj中[ 「一」] = MyObj中[ 「一」] || {}' – C5H8NNaO4

回答

1

恐怕不可能覆蓋JS的原生功能。

你將不得不檢查子屬性。

如果你想確保屬性存在對象上,沒有覆蓋它,做這樣的事情:

myObj['a'] = myObj['a'] || {}; 

這臺myObj['a']本身是否具有價值,或到一個新的空對象如果沒有。

然後做同樣爲myObj['a']['b'],並推到:

myObj['a']['b'] = myObj['a']['b'] || []; 
myObj['a']['b'].push({"c":"d"}); 
2

你不能。 Netscape爲代碼批量道歉。爲什麼不呢?

var myObj = {}; 
myObj.a = {b:[{c:'d'}]}; 
+0

'myObj.a = {b:[{c:'d'}]​​};' 如果我已經有了myObj結構,我不想失去它。例如: 'myObj = {「a」:{「e」:「f」}}' – traylz

+0

您可能需要重新評估您的對象結構方法。你正在尋找的這種技術不適合你。 – AlienWebguy