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

时间:2013-02-06 08:28:56

标签: javascript

我想要这样的事情:

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已经有了一些结构,我不想破坏它。 E.g:

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

如果我写myObj["a"]={};,我将丢失数据 当然可以写

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

但它太笨重了!如果我可以像myObj["a"]["b"].push({"c":"d"});那样编写smth而不检查每一步的null,那就太棒了 有什么建议怎么做?可能有一种方法可以覆盖JS本机对象或类似的东西吗? 提前谢谢!

2 个答案:

答案 0 :(得分:2)

你做不到。 Netscape为代码批量道歉。为什么不呢?

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

答案 1 :(得分:1)

我担心不可能覆盖JS的原生功能。

您将不得不检查子属性。

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

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

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

然后对myObj['a']['b']执行相同操作,并推送到:

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