CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

Object对象存储数据和Array对象存储数据有什么区别

楼主gu1dai(异域苍穹.百年飞行)2006-03-21 14:18:12 在 Web 开发 / JavaScript 提问

我发现当我这样定义一个Array存放一组类别数据的时候,它的length和它的最大key的值相等。  
  var   rows   =   new   Array;    
   
  rows[129]   =   new   Array(129,7,'建筑'   );    
  rows[108]   =   new   Array(108,13,'通信工程'   );  
   
  那么rows虽然只放了两条数据,rows.length却等于129.  
   
  问题1:这是否说明了rows的存储空间会增大,占用内存会增多?  
   
  如果用Object来存储那么是  
   
  var   rows2   =   new   Object;    
   
  rows2={  
  '129'   :   {'id':'129',   'pid':'7',   'title':'建筑'   },    
  '108'   :   {'id':'108',   'pid':'13',   'title':'通信工程'   }  
  }  
   
  这样存储,就可以直接用key来取自己要的数据了。可是rows2.length为空。  
   
  这样用对象存储比如几千条数据,运行起来是否会比用Array来存储几千条数据要慢。  
   
  是否比用数组存储的开销大?IE解释一个类似于上面的对象的时候是否会花费更多的时间?  
   
  问题点数:100、回复次数:11Top

1 楼gu1dai(异域苍穹.百年飞行)回复于 2006-03-21 14:19:51 得分 0

我用这个数据结构来实现我的树形联动,树形菜单,以及其他树形的东西。Top

2 楼liuxiaoyi666(MSMVP 小猪妹荣誉马甲之八卦兔子)回复于 2006-03-21 14:39:27 得分 5

C语言中struct和array的区别Top

3 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-03-21 14:53:38 得分 25

构造函数不同,假如通过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>Top

4 楼shenjf2000(一路走来)回复于 2006-03-21 15:00:29 得分 5

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

5 楼KimSoft(革命的小酒天天醉-http://blog.csdn.net/kimsoft/)回复于 2006-03-21 15:02:19 得分 5

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

6 楼shenjf2000(一路走来)回复于 2006-03-21 15:06:30 得分 5

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

7 楼DeluxWorld(曾经的你)回复于 2006-03-21 15:30:44 得分 5

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

8 楼gu1dai(异域苍穹.百年飞行)回复于 2006-03-21 16:01:48 得分 0

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

9 楼xuzuning(唠叨)回复于 2006-03-21 16:41:10 得分 50

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>Top

10 楼gu1dai(异域苍穹.百年飞行)回复于 2006-03-21 18:22:25 得分 0

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

11 楼mingxuan3000(铭轩)回复于 2006-03-21 20:02:50 得分 0

学习Top

相关问题

  • 如何区别存储器
  • 两个存储过程的区别
  • object 和 Object 有何区别???
  • instance 和 object 的区别?
  • dos中的概念,扩展存储器和扩充存储器的区别?
  • 存储单元与存储元,内存单元三者的区别
  • C的四种变量存储类型有什么区别
  • 视图与存储过程有何区别
  • 存储过程里的变量@var,@@var有区别吗
  • sql server2000中的存储过程和函数有什么区别?

关键词

  • 数据
  • 内存
  • javascript
  • 建筑
  • 数组
  • 存储
  • 对象
  • array
  • 开销
  • rows

得分解答快速导航

  • 帖主:gu1dai
  • liuxiaoyi666
  • hbhbhbhbhb1021
  • shenjf2000
  • KimSoft
  • shenjf2000
  • DeluxWorld
  • xuzuning

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo