开发者问题收集

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

2014-03-18
1473

我似乎无法修复此问题。我的代码如下:

var matrix = [];

// initialise the grid:
window.onload = function(){

    var cells ='';

    for(var i = 0; i < 10; i++){

        matrix[i] = [];

        for (var j = 0; j < 10; j++){

            matrix[i][j] = "white";

            cells += "<span class = 'cell' id='cell"+ i + "" + j + "' onClick = 'toggleCell("+i+","+j+")' ></span>";

        }
    }
        $('#grid-container').html(cells);

}

当我尝试在其他方法中调用矩阵元素时,我得到了未定义的结果。

已解决

  • 稍后尝试访问无效位置的对象。
3个回答

未定义的不是矩阵,而是矩阵[i]。由于您是从 jQuery 的属性方法获取 i 和 j 值,因此它们是字符串;因此在将它们用作数组的索引之前,您必须先将它们转换为整数:

var i = parseInt($(this).attr('id').slice(-2, -1), 10);
var j = parseInt($(this).attr('id').slice(-1), 10);

还请注意,我将第二个参数传递给第一个切片调用,因为您只需要第一个字符。

76484
2014-03-18

matrix 是一个长度为 9 的数组,但您的 for 循环要进行 10 次 ( i < 10 )。将您的循环更改为类似以下内容:

for( var i = 0; i < matrix.length; i++) {
}
Fizz
2014-03-18

@Patrick Evans 是对的。jQuery document ready 函数不需要包装在 window.onload 事件中。此外,如果您有任何在 window.onload 之前触发的代码(因为 document.ready 首先触发),那么数组将不会被填充。@falinsky 使用 var matrix = []; 也是正确的。另请查看此答案,了解 [] 和 new Array() 之间的区别 https://stackoverflow.com/a/1273936/2488939

The Mahahaj
2014-03-18