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"});すべてのステップでnullをチェックせずに、smthのように書くことができれば、それは素晴らしいことです.
これを行う方法について何か提案はありますか? JSネイティブオブジェクトまたはそのようなものをオーバーライドする方法があるかもしれませんか?
前もって感謝します!

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 に答える