以下代码导致控制台打印“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]未定义。
这是什么交易?
答案 0 :(得分:0)
JavaScript没有2D数组。你可以做的是创建一个数组数组。在您的示例中,您完全是这样做的,您创建了一个包含另一个数组的数组。
var x = new Array(new Array());
console.log(x.length); // 1
console.log(x[0]); // []
x
是一个数组,其中一个元素恰好是一个数组。如果您尝试访问x[1]
,即数组中的第二个元素,则会出现错误,因为此元素不存在:
console.log(x[1]); // undefined
您需要做的是首先将数组分配给外部数组中的i
位置:
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]);