首页 > 解决方案 > 访问数组的下一个元素时无法读取未定义的属性

问题描述

我是 javascript 新手,在代码的第 10 行收到以下错误:TypeError: Cannot read property '0' of undefined

var arr = [[1,7], [2,6], [3,5], [4,4], [5,3], [6,2], [7,1]];

console.log("arr[0] = ("+arr[0][0]+","+arr[0][1]+")");
console.log("arr[1] = ("+arr[1][0]+","+arr[1][1]+")");

for (var i in arr) 
{
  console.log("i = "+i);

  if (i<arr.length - 2)
  {
    console.log(i+" ("+arr[i][0]+","+arr[i][1]+")");
    console.log(i+" ("+arr[i+1][0]+","+arr[i+1][1]+")");
  }
}

此错误之前的输出是

arr[0] = (1,7)
arr[1] = (2,6)
i = 0
0 (1,7)

所以如果i=0,那么i+1就是1,定义了arr[1][0]。如上面 arr[1][0]=2 所示。我的错误是什么?

标签: javascriptarrays

解决方案


如果你运行下面的代码片段,你可以看到类型i字符串

var arr = [[1,7], [2,6], [3,5], [4,4], [5,3], [6,2], [7,1]];

for (var i in arr) 
{
  console.log(typeof i); // string  
}

如果i是字符串并且 i = "0",则 i + 1 不是 1,而是 "01"。并且arr["01"]是未定义的,所以你有错误。

我建议这个版本,我使用旧语法

var arr = [[1,7], [2,6], [3,5], [4,4], [5,3], [6,2], [7,1]];
for (var i = 0; i < arr.length; i = i + 1) 
{
  console.log("i = "+i);

  if (i<arr.length - 2)
  {
    console.log(i+" ("+arr[i][0]+","+arr[i][1]+")");
    console.log(i+" ("+arr[i+1][0]+","+arr[i+1][1]+")");
  }
}


推荐阅读