首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JS数组”(array)跟“对象”(object)

2012-10-31 
JS数组”(array)和“对象”(object)JS数组”(array)和“对象”(object)JS技术 2009-12-30 16:15:45 阅读294 评论

JS数组”(array)和“对象”(object)
JS数组”(array)和“对象”(object)

JS技术 2009-12-30 16:15:45 阅读294 评论0   字号:大中小 订阅

        比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢?

        数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。

        当然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。但是问题是,很多编程语言中,都有一种叫做“关联数组”(associative array)的东西。这种数组中的数据是有名称的。

比如在javascript中,可以这样定义一个对象:

             var a={"城市":"北京","面积":16800,"人口":1600};

但是,也可以定义成一个关联数组:


在上例中,需注意,可以通过把一个值赋给对象的一个新属性来创建它.
  在JavaScript语句中提到过用for/in语句可以遍历对象的属性和方法。
  用in运算符检查属性是否存在.如:
if ("x" in o) o.x = 1;//如果存在就设置其属性值为1.
如果这样写:o.x=undefined //属性x是存在的,但是没有值.我常常会这样写:if (o.x !== undefined) o.x = 1;
另外,!= =常代替!=.!= =和= = = 区别在于undefined和null,不用区分时可以省略,如:if (o.doSomething) o.doSomething();
  删除属性:delete book.chapter2;
  作为关联数组的对象:object.property 和object["property"]是等价的.
  通用对象的属性和方法
   constructor属性:var d = new Date();d.constructor == Date; // true
   由于构造函数定义了一个对象的类,所以属性constructor在有助于确定给定对象的类型.如,可以使用如下代码来确定一个未知对象的类型:if ((typeof o == "object") && (o.constructor == Date)),也可以用instanceof运算符:if ((typeof o == "object") && (o instanceof Date))
  toString()方法:返回一个字符串,该字符串代表了调用它的对象的类型或值.当javascript需要将一个对象转换成字符串时就调用这个对象的toString()方法.例如当用"+"连接一个字符和一个对象时,或者把一个对象传递给alert()或document.write()方法时,就会调用toString().
  默认的toString()方法提供的信息并不多.例如下面的代码只能得到字符串"[object Object]":var s = { x:1, y:1 }.toString();所以许多类都定义了自己的toString()方法,例如,当一个数组被转换成一个字符串时,就得到一个数组元素列表,其中每个元素都被转换成了字符串,当一个函数被转换成字符串时,就会获得该函数的源代码.第九章将详细讲述.
  toLocaleString()方法:返回该对象局部化的字符串表示.Oject类定义的默认toLocaleString()方法自身不做任何局部化,返回的结果与toString() 方法返回的完全相同,但是Object 类的子类则可能定义自己的toLocaleString()方法.
  valueOf()方法:与toString()相似,当javascript需要将一个对象转换成字符串之外的原始类型(通常是数字)时,就需要调用它.
  hasOwnProperty方法:如果对象局部定义一个非继承的属性,属性名是由一个字符串实际参数指定的,那么该方法将返回true,否则,它将返回false.如:
<script>var news ={ 1:{id:101,title:'这是标题1',content:'这里是内容1'}, 2:{id:102,title:'这是标题2',content:'这里是内容2'}, 3:{id:103,title:'这是标题3',content:'这里是内容3'}, 4:{id:104,title:'这是标题4',content:'这里是内容4'}, jingdian:{101:'AAA',102:'BBB',103:'CCC',104:'DDD'}}var jingdian ={ 101:{1101:'天',1102:'地',1103:'东'}, 102:{2101:'天2',2102:'地2',2103:'东2'}, 103:{3101:'天3',3102:'地3',3103:'东3'}}for (var n in news){ if(n!='jingdian'){  document.write(n+"--"+news[n].id+"--"+news[n].title+'----'+news[n].content+'======'+get_jingdian(news[n].id)+'=========<br>'); }}document.write('<hr>');document.write(news[1]['title']+'--');document.write(news[1].title);document.write('<hr>');for (var J in news['jingdian']){ document.write(news['jingdian'][J]+'<br>'); }document.write('<hr>');function get_jingdian(id){ //document.write(id); //alert('id:'+id); var str=''; for (var j in jingdian){  if(j==id){   //alert(j+'----'+id);   for (j2 in jingdian[id]){    str+='<a href='+j2+'>'+jingdian[id][j2]+'('+j2+')</a> ';   }  } }return str;}</script>

热点排行