为什么这个javascript数组未定义?

GSt*_*Sto 1 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(passes);
    color = Math.random() * color_depth;
    map_store[i][j] = Math.round(color);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我把console.log语句放在循环中,这似乎工作正常,但是如果我尝试访问map_store循环外的数组.它的所有元素都是未定义的.为什么是这样?

Hal*_*yon 9

map_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);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @Frits van Campen风格真的 - 因为语言*具有*内置功能,也可以利用它(即使`新的数组(len)`和`[]`在`len`时略有不同不是0).还应该注意的是,[Array构造函数](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array)在处理参数方面有些特殊.也就是说,`[x]`和`new Array(x)`是不同的,而`[x,y]`和`new Array(x,y)`是相同的.很棒的设计:) (2认同)