为什么我得到不能设置属性' na0'未定义的错误?

时间:2014-11-05 17:08:59

标签: javascript

这是我的代码:

var places = { };
var x = 0;

for (var k in data.na)
{
    var contentId = data.na[k].contentId;
    var contentType = data.na[k].contentType;
    var key = contentType + '_' + contentId;
    var address = data.na[k].address;
    var topics = data.na[k].topic;
    var research_theme = data.na[k].research_theme;

    places[key]["na" + x]= [address, topics, research_theme];       
    x++;    
}

然而它说Uncaught TypeError:无法设置属性' na0'未定义的 为什么?我想拥有na0,na1等等。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这一行:

places[key]["na" + x]= [address, topics, research_theme]; 

正在尝试在na0上设置places[key]属性,但key上的places中没有名称属性(这是一个完全空白的对象),所以places[key]undefined,导致错误。

如果您的目标是让places[key]成为您为其指定属性的对象,请在其上方添加:

if (!places[key]) {
    places[key] = {};
}

...如果它还不存在,则在尝试在其上设置属性之前创建它。 (例如,我假设contentType + '_' + contactId可能在多个循环迭代中具有相同的值。)


但是,确定你想要的对象有时会有na0,有时只有na1,有时只有na2等等吗?如果您只想为每个na创建一个key数组,则需要执行此操作:

if (!places[key]) {
    places[key] = {na: []};
}
places[key].na.push([address, topics, research_theme]);

......但我猜你的最终目标。只是觉得值得一记。