为什么我得到无法设置属性'na0'的未定义错误

Why I get Cannot set property 'na0' of undefined error?

本文关键字:na0 错误 未定义 属性 设置 为什么      更新时间:2023-09-26

这是我的代码:

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等等。我该怎么做?

此行:

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

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

如果你的目标是让places[key]成为你分配属性的对象,那么在它上面添加这个:

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

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


但是您是否确定您想要的对象有时有na0,有时只有na1,有时只有na2,依此类推?如果你只想为每个key创建一个na数组,你需要这样做:

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

但我猜你的最终目标是什么。只是觉得值得一提。