索引到2D数组时出现JavaScript类型错误
我正在编写一些代码,用于处理“单元”对象的二维数组索引到2D数组时出现JavaScript类型错误,javascript,arrays,Javascript,Arrays,我正在编写一些代码,用于处理“单元”对象的二维数组 function randomDestFromStart(cell, temp) { function addPossible(x, y) { var test1 = temp[x]; var test2 = test1[y]; // This line // ... // } for (var i = 0; i < temp[0].length; i++
function randomDestFromStart(cell, temp)
{
function addPossible(x, y)
{
var test1 = temp[x];
var test2 = test1[y]; // This line
// ... //
}
for (var i = 0; i < temp[0].length; i++)
addPossible(cell.x, i);
// ... //
}
我已经在调试器中确认x
和y
是有效的整数(在本例中,它们分别为0和1)temp
是一个有效数组,由5个子数组单元对象组成,因此不应存在任何类型的索引越界错误。将一个级别索引到temp
似乎没有问题,因为test1
是一个由5个单元格组成的有效数组(基本上是一行temp
)。问题是当我索引到数组的第二维时,这很奇怪,因为索引到同一个精确数组在代码的其他部分工作
编辑:问题似乎出在x和y的输入上。当我硬编码这些值时,一切正常。例如,
addapability(2,3)
起作用。当动态提供值时会发生错误,但这很奇怪,因为即使在这些情况下,调试器也会将x和y显示为完全正常和有效的整数。我99%确信这不是一个不可能的问题。我已经检查过了,数组是5x5,x和y总是在0和4之间。最有可能的情况是,您的临时数组大于cell.x中存在的任何值。也可能是cell.x太大了,您需要cell.x-1请显示数组的内容。如果没有看到您试图读取的数据,我们无法告诉您发生了什么。对于迭代循环,您不应该将第一级数组索引硬编码为0吗?“iaddmable
定义的最开始插入console.log(temp)
并告诉我们它会说什么吗?@winterblood数组有点大,无法发布。这是一个5x5的单元格对象数组,我已经通过调试器确认了这一点。如果我们检查console.log(typeof x)
,会怎么样?是的,结果证明它毕竟是越界的。我一定一直在错误地阅读Firebug,因为我从未看到过一个太大的值。使用console.log(x)
解决了问题。
TypeError: test1 is undefined