JS奇怪的错误:无法读取未定义的属性

时间:2019-01-05 18:21:27

标签: javascript json xmlhttprequest

代码中问题的描述。为什么会这样?

email

UPD。我添加了临时变量,它可以正常工作。

var response = JSON.parse(xhr.responseText);
console.log(response[0].conversationUsers.length); //OK, console outputs "2"
  for (i = 0; i < response.length; i++) {
  for (j = 0; j < response[i].conversationUsers.length; j++) { //Error 'cannot read property', but it has to be interpreted "j = 0; j < 2; j++" and it worked in console.log
          ...
        }
      }

问题可以解决,但是有什么想法可以解决?

2 个答案:

答案 0 :(得分:0)

您仅将console.log()用于该数组中的第一个对象。我建议您尝试:

var response = JSON.parse(xhr.responseText);
for (i = 0; i < response.length; i++) {
  console.log(response[i].conversationUsers); // should be an array
  for (j = 0; j < response[i].conversationUsers.length; j++) {
          ...
  }
}

如果您在控制台中看到任何undefined,则表示您已确定问题所在。

问题在于,对于数组response[0].conversationUsers中的第一个元素,其值是一个数组。对于该数组中的每个元素可能都不是正确的,因此其中某些元素可能没有length属性。

答案 1 :(得分:-4)

您正在尝试迭代内部length属性。尝试去掉长度。像这样

    var response = JSON.parse(xhr.responseText);
    console.log(response[0].conversationUsers.length);
    for (i = 0; i < response; i++) {
      for (j = 0; j < response[i].conversationUsers; j++) {
          ...
      }
    }