Javascript可以';t将未定义的转换为对象

Javascript可以';t将未定义的转换为对象,javascript,Javascript,我有以下代码 for(i = 0; i < num; i++) { var yPos = 10*i; var numCells = wid/30; for(j = 0; j < numCells; j++) { blocks[i][j] = 1; } } 但是,当我执行代码时,我收到一个错误,指出: can't convert undefined to object 有什么想法吗/ v

我有以下代码

for(i = 0; i < num; i++) {
    var yPos = 10*i;
    var numCells = wid/30;

    for(j = 0; j < numCells; j++) {
        blocks[i][j] = 1;
    }                       
}
但是,当我执行代码时,我收到一个错误,指出:

can't convert undefined to object
有什么想法吗/

var块=[];
var blocks = [];
for(i = 0; i < num; i++) {    
    var yPos = 10*i;
    var numCells = wid/30;
    blocks[i] = []; // here is a fix

    for(j = 0; j < numCells; j++) {
        blocks[i][j] = 1;
    }
}
对于(i=0;i
var blocks=[];
对于(i=0;i
在您的特定情况下,由于所有行都被初始化为相同的(一系列的1),因此您也可以这样做

var blocks = new Array(),
    blockRow = new Array();
for (var i = 0; i < numCells; i++) {
    blockRow.push(1);
}
for (var i = 0; i < num; i++) {
    blocks.push(blockRow.slice());  // slice() makes a copy of blockRow
}
var blocks=new Array(),
blockRow=新数组();
对于(var i=0;i
在您的特定情况下,由于所有行都被初始化为相同的(一系列的1),因此您也可以这样做

var blocks = new Array(),
    blockRow = new Array();
for (var i = 0; i < numCells; i++) {
    blockRow.push(1);
}
for (var i = 0; i < num; i++) {
    blocks.push(blockRow.slice());  // slice() makes a copy of blockRow
}
var blocks=new Array(),
blockRow=新数组();
对于(var i=0;i
我怀疑您需要将块声明为2D数组。试试[这个问题][1]。[1] :我怀疑您需要将块声明为二维数组。试试[这个问题][1]。[1] :非常感谢,这把它修好了;你知道怎么回事吗?:)不,只是猜测。。。开玩笑:)
var blocks=[]
-现在
blocks
是一个
数组
,但是
blocks[i]
不是数组。。。添加
块[i]=[]
后,它成为一个数组,您可以操作
块[i][x]
。在设置
块[i]=[]
之前,它等于
未定义的
,您尝试更改未定义对象的属性。我希望它足够清楚,因为我的英语不是很好…哦,好的,谢谢,现在明白了;D被用于其他编程语言,在这些语言中,您可以只添加维度而不声明它们!关于JS,你要知道的第二件重要的事情是——我的答案旁边的空白复选标记需要按下,否则数组可能会停止工作:)非常感谢,这就解决了它;你知道怎么回事吗?:)不,只是猜测。。。开玩笑:)
var blocks=[]
-现在
blocks
是一个
数组
,但是
blocks[i]
不是数组。。。添加
块[i]=[]
后,它成为一个数组,您可以操作
块[i][x]
。在设置
块[i]=[]
之前,它等于
未定义的
,您尝试更改未定义对象的属性。我希望它足够清楚,因为我的英语不是很好…哦,好的,谢谢,现在明白了;D被用于其他编程语言,在这些语言中,您可以只添加维度而不声明它们!关于JS,你要知道的第二件重要的事情是:我的答案旁边的空白复选标记需要按下,否则数组可能会停止工作:)