Javascript JS:动态创建不存在属性的子属性

Javascript JS:动态创建不存在属性的子属性,javascript,Javascript,我想要这样的东西: var myObj = {}; myObj["a"]["b"].push({"c":"d"}); myObj['a'] = myObj['a'] || {}; 我希望myObj变成:{“a”:{“b”:[{“c”:“d”}}但是我得到了一个错误 无法设置未定义的属性“b” 是的,我知道我可以这样一步一步地创建它: var myObj={}; myObj["a"]={}; myObj["a"]["b"]=[]; myObj["a"]["b"].push({"c":"d"})

我想要这样的东西:

var myObj = {};
myObj["a"]["b"].push({"c":"d"});
myObj['a'] = myObj['a'] || {};
我希望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"]={}
}
但它太笨重了!如果我可以编写smth,比如
myObj[“a”][“b”].push({“c”:“d”})不检查每个步骤是否为空。
有什么建议吗?有没有一种方法可以像那样覆盖JS原生对象或smth?

提前谢谢你

你不能。Netscape为大量代码道歉。为什么不是这个

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

你不能。Netscape为大量代码道歉。为什么不是这个

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

恐怕不可能像那样覆盖JS的本机功能

您必须检查子属性

如果要确保对象上存在属性,而不覆盖该属性,请执行以下操作:

var myObj = {};
myObj["a"]["b"].push({"c":"d"});
myObj['a'] = myObj['a'] || {};
这将
myObj['a']
设置为自身(如果它有值),或者设置为新的空对象(如果它没有值)

然后对myObj['a']['b']
执行相同的操作,并按下按钮:

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

恐怕不可能像那样覆盖JS的本机功能

您必须检查子属性

如果要确保对象上存在属性,而不覆盖该属性,请执行以下操作:

var myObj = {};
myObj["a"]["b"].push({"c":"d"});
myObj['a'] = myObj['a'] || {};
这将
myObj['a']
设置为自身(如果它有值),或者设置为新的空对象(如果它没有值)

然后对myObj['a']['b']
执行相同的操作,并按下按钮:

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

您可以简化检查->
myObj[“a”]=myObj[“a”]|{}
您可以简化检查->
myObj[“a”]=myObj[“a”]|{
myObj.a={b:[{c:'d'}myObj={“a”:{“E”:“f”}
您可能需要重新评估您的对象结构方法。你正在寻找的这个技巧对你不起作用。
myObj.a={b:[{c:'d'}]}myObj={“a”:{“E”:“f”}
您可能需要重新评估您的对象结构方法。你正在寻找的这个技巧对你不起作用。