0

いくつかのオブジェクト プロパティを設定しようとしていますが、時々次のエラーが発生します。

キャッチされていない TypeError: 未定義のプロパティ '4' を読み取ることができません

コード:

var obj = {};

obj['fields'][4]['name'] = value;

はい、4は存在しませんが、なぜ作成されないのですか?

4

3 に答える 3

8

obj['fields']実際には、未定義であると言っています。いいえ、ネストは自動的に作成されません。

var obj = {};
obj['fields'] = {};
obj['fields'][4] = {};
obj['fields'][4]['name'] = value;

オブジェクトを操作するときに、すでにネストされているかどうかがわからない場合 (およびネストされている場合に上書きしたくない場合) は、次の操作を実行できます。

obj['fields'] = obj['fields'] || {}
obj['fields'][4] = obj['fields'][4] || {};
//etc

未定義を確認するには:

if(!obj['fields']){} // undefined returns falsey
//or 
if('fields' in obj == false){} // notice you can't lead with ! here
//or
if(obj['fields'] === undefined){} // note the triple ===
于 2013-10-28T16:23:39.723 に答える
1

最初にプロパティを初期化する必要があります。

var obj = {};

obj['fields'] = new Array();
obj['fields'][4] = new Array();
obj['fields'][4]['name'] = value;
于 2013-10-28T16:25:05.607 に答える
0

存在しないプロパティを読み取ろうとしても作成されません。fieldsエラーが発生する正確な理由は、 returnにアクセスしようとするとundefined、値からプロパティにアクセスできないためundefinedです。

値を設定するには、すべての親を作成する必要があります。

obj.fields = [];
obj.fields[4] = {};
obj.fields[4].name = value;
于 2013-10-28T16:26:35.157 に答える