我想通过for循环动态创建一个二维数组,但是当我在第一层循环条件上把length+1之后就会出现死循环,数组a的长度就会不断增加。如下例子:
这是正确的,不会出现死循环:
var a=new Array(9);
for(var row=1;row<a.length;row++){
a[row]=new Array(row);
console.log(a.length);
}
这样写就会出现死循环:
var a=new Array(9);
for(var row=1;row<a.length+1;row++){
a[row]=new Array(row);
console.log(a.length);
}
请问这是什么原因造成的?
row<a.length+1
输出这里是否满足条件,length是否增加
a 初始长度是1 下标为0 循环一次相当于给a增加一个元素 死循环了
数组Array的属性length是可写可变的,分析楼主第二种:初始化长度为9,a.length=9,进入for循环,row=1,row< 10,然后执行a[1]=new Array(1),这里是重点,a[1]表示的是数组的第二个值,虽然右边new Array(1)数组长度为1,但是a[1]会将这个数组长度length写为2,此时a.length=2,进入下次循环,row=2,row< a.length+1也就是row < 3 满足条件,然后执行 a[3]=new Array(3) 同理长度写为4,进行下一次循环,由此下去就死循环了,纯属分析,楼主自行验证一下
第二种相等于给数组一直扩容…………
因为你的for循环里每次都是在重新创建对象,所以你的a.length一直在变化,你给a.length+1的话,你的row就永远小于a.length+1