0

我想要这样的东西:

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"});如果我可以只写 smth而不在每一步都检查 null,那就太好了。
任何建议如何做到这一点?可能有一种方法可以覆盖 JS 原生 Object 或类似的东西吗?
先感谢您!

4

2 回答 2

2

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

var myObj = {};
myObj.a = {b:[{c:'d'}]};
于 2013-02-06T08:30:19.153 回答
1

恐怕不可能像那样覆盖 JS 的原生功能。

您将不得不检查子属性。

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

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

如果它有值,则设置myObj['a']为自身,如果没有,则设置为新的空对象。

然后对 做同样的事情myObj['a']['b'],然后推动:

myObj['a']['b'] = myObj['a']['b'] || [];
myObj['a']['b'].push({"c":"d"});
于 2013-02-06T08:32:34.080 回答