我正在尝试设置一些对象属性,但有时会出现此错误:
未捕获的类型错误:无法读取未定义的属性“4”
编码:
var obj = {};
obj['fields'][4]['name'] = value;
是的,4不存在,但为什么没有创建呢?
我正在尝试设置一些对象属性,但有时会出现此错误:
未捕获的类型错误:无法读取未定义的属性“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
返回undefined
,并且您无法从undefined
值访问任何属性。
要设置该值,您需要创建所有父级:
obj.fields = [];
obj.fields[4] = {};
obj.fields[4].name = value;