为什么这个javascript数组没有定义?

为什么这个javascript数组没有定义?,javascript,Javascript,我有以下代码,它试图生成随机数的二维数组: var block_size = 32; var can_width = can.width; var color_depth = 12; var passes = can_width / block_size; var map_store = new Array(passes); for(i=0;i<passes;i++) { for(j=0;j<passes;j++) { map_store[i] = new Array(

我有以下代码,它试图生成随机数的二维数组:

var block_size = 32;
var can_width = can.width;
var color_depth = 12;
var passes = can_width / block_size;
var map_store = new Array(passes);

for(i=0;i<passes;i++) {
  for(j=0;j<passes;j++) {
    map_store[i] = new Array(passes);
    color = Math.random() * color_depth;
    map_store[i][j] = Math.round(color);
  }
}
var块大小=32;
var can_width=can.width;
var color_depth=12;
var PASS=can\u宽度/块大小;
var map_store=新数组(通过);

for(i=0;i
map\u store[i]=new Array(passes);
应该在第二个
for
循环的上方。您正在清除以前的
j

for(i=0;i<passes;i++) {
  map_store[i] = new Array(passes); // <--
  for(j=0;j<passes;j++) {
    color = Math.random() * color_depth;
    map_store[i][j] = Math.round(color);
  }
}

for(i=0;i
映射存储[i]=新数组(通过);
应该位于
for
循环的第二个
之上。您正在清除以前的
j

for(i=0;i<passes;i++) {
  map_store[i] = new Array(passes); // <--
  for(j=0;j<passes;j++) {
    color = Math.random() * color_depth;
    map_store[i][j] = Math.round(color);
  }
}

for(i=0;i像数组中的最后一个元素一样应该有一个值看起来像数组中的最后一个元素应该有一个值你也可以只做
map\u store[i]=[];
在这种情况下没有任何实际好处,因为你知道数组的长度。为什么
[]
通常比
新数组
好?(我知道是这样,但我不知道为什么)@Frits van Campen风格真的——因为该语言有一个内置功能,不妨利用它(即使
新数组(len)
[]
len
不是0时略有不同)。还应该注意的是,它在处理参数方面有些特殊。也就是说,
[x]
新数组(x)
是不同的,而
[x,y]
新数组(x,y)
是相同的。很棒的设计:)如果你关心速度,Frits van Campen拥有的东西是可以的。宣布新数组(500)然后覆盖每个元素通常比var foo=[]快;500次推送会阻止特定于VM的优化。请参阅我的文章,从性能角度获得详细解释。您会发现在高性能JS libs中,仍然使用新的数组(x)。当然,我们也不希望预成熟优化:)然而,关键是
[]
和所有最佳实践一样,不是一条“法律”。你也可以只做
映射存储[i]=[];
在这种情况下没有任何实际的好处,因为你知道数组的长度。为什么
[]
通常比
新数组
好?(我知道是这样,但我不知道为什么)@Frits van Campen风格真的——由于该语言有一个内置功能,不妨利用它(即使
new Array(len)
[]
len
不是0时略有不同)。还应该注意,它在处理参数方面有些特殊。也就是说,
[x]
新数组(x)
是不同的,而
[x,y]
新数组(x,y)
是相同的。非常棒的设计:)如果你关心速度,Frits van Campen拥有的是好的。声明新数组(500)然后覆盖每个元素通常比var foo=[];和500次推送阻止特定于VM的优化。有关性能方面的详细说明,请参阅我的文章。您会发现在高性能JS LIB中,仍然使用了新的阵列(x)。当然,我们也不希望进行预成熟优化:);然而,关键是,
[]
——就像所有的最佳实践一样——不是“法律”