0

我正在尝试设置一些对象属性,但有时会出现此错误:

未捕获的类型错误:无法读取未定义的属性“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返回undefined,并且您无法从undefined值访问任何属性。

要设置该值,您需要创建所有父级:

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