我正在尝试设置一些对象属性,但有时会出现此错误:
未捕获的TypeError:无法读取未定义的属性“4”
代码:
var obj = {};
obj['fields'][4]['name'] = value;
是的,4不存在,但为什么不创建呢?
答案 0 :(得分: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 ===
答案 1 :(得分:1)
您必须首先初始化属性:
var obj = {};
obj['fields'] = new Array();
obj['fields'][4] = new Array();
obj['fields'][4]['name'] = value;
答案 2 :(得分:0)
尝试读取不存在的属性不会创建它。您收到错误的确切原因是尝试访问fields
会返回undefined
,并且您无法访问undefined
值中的任何属性。
要设置值,您需要创建所有父项:
obj.fields = [];
obj.fields[4] = {};
obj.fields[4].name = value;