向对象添加属性

时间:2013-10-28 16:22:03

标签: javascript object properties

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

  

未捕获的TypeError:无法读取未定义的属性“4”

代码:

var obj = {};

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

是的,4不存在,但为什么不创建呢?

3 个答案:

答案 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;