PromiseKeeping 2017-10-24 18:47 采纳率: 0%
浏览 1929

for循环动态创建一个二维数组出现死循环

我想通过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);                
    }

请问这是什么原因造成的?

  • 写回答

5条回答 默认 最新

  • devmiao 2017-10-24 18:59
    关注

    row<a.length+1
    输出这里是否满足条件,length是否增加

    评论
  • tt951196421 2017-10-24 19:04
    关注

    a 初始长度是1 下标为0 循环一次相当于给a增加一个元素 死循环了

    评论
  • penguinDada 2017-10-24 19:21
    关注

    数组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,进行下一次循环,由此下去就死循环了,纯属分析,楼主自行验证一下

    评论
  • qffshzhy911 2017-10-24 20:29
    关注

    第二种相等于给数组一直扩容…………

    评论
  • 愿天堂没有阿雨 2017-10-24 23:48
    关注

    因为你的for循环里每次都是在重新创建对象,所以你的a.length一直在变化,你给a.length+1的话,你的row就永远小于a.length+1

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 pycharm倒入虚拟环境的时候,显示这个,但是我的虚拟环境已经创建了
  • ¥15 FPGA芯片60进制计数器
  • ¥15 前端js怎么实现word的.doc后缀文件在线预览
  • ¥20 macmin m 4连接iPad
  • ¥15 DBIF_REPO_SQL_ERROR
  • ¥15 根据历年月数据,用Stata预测未来六个月汇率
  • ¥15 DevEco studio开发工具 真机联调找不到手机设备
  • ¥15 请教前后端分离的问题
  • ¥100 冷钱包突然失效,急寻解决方案
  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部