关于JS 数组的内存分配方式的讨论:
代码如下:
var arrT = new Array();
arrT[10254] = 'c';
arrT[2] = 'a';
arrT分配了多大的内存空间?数组长度是 2 还是 10255 ?
谢谢~

解决方案 »

  1.   


    var arrT = new Array();
    arrT[10254] = 'c';
    arrT[2] = 'a';
    alert(arrT.length);
      

  2.   

    jayrao5566  的结果是 10254:
      能说明分配了 10254 个单位的内存吗?
    应该不能吧, 因为除了 arrT[10254] ,arrT[2] 其它的都是 === null
      js 应该是用到了 才占用内存的吧!
    arrT[10254] 与arrT[2] ,很可能就是 变量 arrT.length === 2 与arrT.length === 10254 的区别而已
        
      

  3.   

    jayrao5566  的结果是 10254:
      能说明分配了 10254 个单位的内存吗?
    应该不能吧, 因为除了 a……
    [/Quote]我在测试的过程中,将数组arrT[10254] 修改成 arrT[102540000],观察浏览器页面所占用的内存并没有多大改变。IE和Chrome测试结果相同。
    下面两段代码运行后,IE页面耗费的内存分别为 28896 K  ---> 28900 K , 节点个数由9增加到10240000,而内存只增加 4K。
    arrT[-1] = new makeALine(-4, 43, 44);
    arrT[4] = new makeALine(4, 43, 44);
    arrT[8] = new makeALine(8, 81, 82);
    //arrT[10240000] = new makeALine(1024, 10241, 10242);arrT[-1] = new makeALine(-4, 43, 44);
    arrT[4] = new makeALine(4, 43, 44);
    arrT[8] = new makeALine(8, 81, 82);
    //arrT[10240000] = new makeALine(1024, 10241, 10242);
      

  4.   

    其实, 
    iE fireFox 正常有10k 内存 的跳动。
       不信,你什么代码都不写,打开一个Hao 123 主页,
     就仅仅在那里点刷新,  再看IE or Firefox 的内存占用情况(ctrl+alt+Delete),你就明白的。
      

  5.   

    写错了,修改第二段代码 arrT[10240000] = new makeALine(1024, 10241, 10242);
    JScript codearrT[-1] = new makeALine(-4, 43, 44);
    arrT[4] = new makeALine(4, 43, 44);
    arrT[8] = new makeALine(8, 81, 82);
    //arrT[10240000] = new makeALine(1024, 10241, 10242);JScript codearrT[-1] = new makeALine(-4, 43, 44);
    arrT[4] = new makeALine(4, 43, 44);
    arrT[8] = new makeALine(8, 81, 82);
    arrT[10240000] = new makeALine(1024, 10241, 10242);