0

以下代码导致控制台打印“Z”。

<script>
var x = new Array(new Array());
x[0][0] = "Z";
console.log(x[0][0]);
</script>

但是,如果我用任意尺寸的嵌套 for 循环替换 x[0][0] = "Z" ...

<script>
var x = new Array(new Array());
for(i=0;i<5;i++){
    for(j=0;j<3;j++){
        x[i][j] = "Z";
    }
}
console.log(x[0][0]);
</script>

...它卡在第零次迭代中,尽管它与第一个中给出的指令(据我所知)相同。根据 Chrome 和 Firefox 的输出,它突然认为 x[0][0] 未定义。

这是怎么回事?

4

1 回答 1

0

JavaScript 没有二维数组。您可以做的是创建一个数组数组。在您的示例中,您正是这样做的,您创建了一个包含另一个数组的数组。

var x = new Array(new Array());
console.log(x.length); // 1
console.log(x[0]); // []

x是一个数组,其中一个元素恰好是一个数组。如果你试图访问x[1],即数组中的第二个元素,你会得到一个错误,因为这样的元素不存在:

console.log(x[1]); // undefined

您要做的是首先将一个数组分配给外部数组中的i第 th 位置:

var x = []; // create outer array
for(i=0;i<5;i++){
    x[i] = []; // create inner array at i
    for(j=0;j<3;j++){
        x[i][j] = "Z";
    }
}
console.log(x[0][0]);
于 2013-11-18T02:54:30.953 回答