いくつかのオブジェクト プロパティを設定しようとしていますが、時々次のエラーが発生します。
キャッチされていない TypeError: 未定義のプロパティ '4' を読み取ることができません
コード:
var obj = {};
obj['fields'][4]['name'] = value;
はい、4は存在しませんが、なぜ作成されないのですか?
いくつかのオブジェクト プロパティを設定しようとしていますが、時々次のエラーが発生します。
キャッチされていない TypeError: 未定義のプロパティ '4' を読み取ることができません
コード:
var obj = {};
obj['fields'][4]['name'] = value;
はい、4は存在しませんが、なぜ作成されないのですか?
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 ===
最初にプロパティを初期化する必要があります。
var obj = {};
obj['fields'] = new Array();
obj['fields'][4] = new Array();
obj['fields'][4]['name'] = value;
存在しないプロパティを読み取ろうとしても作成されません。fields
エラーが発生する正確な理由は、 returnにアクセスしようとするとundefined
、値からプロパティにアクセスできないためundefined
です。
値を設定するには、すべての親を作成する必要があります。
obj.fields = [];
obj.fields[4] = {};
obj.fields[4].name = value;