构造函数不同,假如通过prototype为Array扩充一个方法后,object就不能用
<script language=javascript>
var rows = new Array; rows[129] = new Array(129,7,'建筑' ); 
rows[108] = new Array(108,13,'通信工程' );
alert(rows.constructor)
var rows2 = new Object; rows2={
'129' : {'id':'129', 'pid':'7', 'title':'建筑' }, 
'108' : {'id':'108', 'pid':'13', 'title':'通信工程' }
}
alert(rows.constructor)
</script>

解决方案 »

  1.   

    在Javascript中array的length和object的length并不同于其他语言中的array的length。我觉得楼主使用数组case应该不会导致性能的问题,在Javascript中array实际也是一种object,只不过有一些特别的方法。
      

  2.   

    不会,详细请参考javascript权威指南数组的章节。
      

  3.   

    补充一下由于Javascript中的array是不连续的,因此我觉得上面使用数组的方法不会导致性能的问题。
      

  4.   

    数组本身也是一种对象,只是多了length属性。
    lz的问题应该与数组的长度没有关系,因为数组是动态的
    rows[107]没有分配到内存空间
    用对象存储的话,实际上使用的也是数组的模式(key--value),
    如果从应用的角度看,用对象存储要好一些~
      

  5.   

    我总是怀疑用Object存储会带来额外的内存开销,虽然我测试了速度和用Array的基本相当。可是那个array.length方法为什么按我的最大key返回长度?
    所以我又怀疑这样用Array会带来内存的无用开销。迷惑中。
      

  6.   

    array.length返回最大可用下标。通常数组的下标是连续的,所以把他视为数组的规模。
    看一下这个测试,你就应该没有什么担忧了<script>
    var rows = new Array; rows[129] = new Array(129,7,'建筑' ); 
    rows[108] = new Array(108,13,'通信工程' );
    rows['gu1dai'] = 'abcd'; //注意这里并没有改变rows.length的值document.write('rows.length:'+rows.length+'<br>');i = 0;
    for(v in rows) {
      document.write('['+i+']'+v+'=>'+rows[v]+'<br>');
      i++;
    }
    </script>
      

  7.   

    关于array.length返回错误的结果我明白了。
    还有一个疑问
    不知道用Object存储数据会不会带来额外的内存开销。用Object存储数据可以使用key,好处很多。
    就是不知道每行一个
    {'id':'129', 'pid':'7', 'title':'建筑' }
    这会不会多占内存。