2012-12-09 33 views
1

我有以下代碼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; 
    }      
} 

隨着

blocks = new Array(); 

然而,當我執行的代碼,我收到一個錯誤,指出:

can't convert undefined to object 

任何想法? :/

+1

我懷疑你需要聲明塊是一個2D數組。試試[這個問題] [1]。 [1]:http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript – chooban

回答

4
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; 
    } 
} 
+0

非常感謝你,這個固定! ; D有什麼錯誤的想法? :) – MrD

+0

不,剛剛猜到...開玩笑:) 'var blocks = []' - 現在'blocks'是一個'array',但'blocks [i]'不是一個數組......在添加blocks'後[ i] = []'它變成一個數組,你可以操作'blocks [i] [x]'。在設置'blocks [i] = []'之前,它等於'undefined'並且你試着改變未定義對象的屬性。我希望這已經足夠清楚了,因爲我的英語不太好...... –

+0

Oooh好的,謝謝,現在明白了; D習慣於其他的編程語言,您可以在不聲明的情況下添加尺寸! – MrD

0

你的具體情況,因爲所有的行被初始化爲相同(系列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 
} 
相關問題