从数组的加强for循环说起

想想也够悲剧的, 玩了那么久的js, 居然一片博客也未曾写过. 这种情况倒不是因为我不愿意分享自己的知识, 很大程度上还是因为我的懒惰和贪玩. 这几天实在有些做不住了, 想想也是时候总结一些我玩js的心得了, 算是一次对自己的混乱的知识的梳理.

先谈谈for循环. 加强for循环是种用于遍历数组对象的循环语句, php,C# 中都是有的, 他们的关键字一般都是foreach, 比如php会这么写:

 foreach($array as $v){  

   //遍历过程

 }

  javascript没有foreach语句, 但是它也有加强for循环, 不过值得注意的是, js的这种循环行为上是有些怪异的, 在浏览器中可以试一试这一段代码:

var array = [11,22,33,44,55];    //定义一个数组

for(var v in array){

  document.write(v +'<br />');

  看到结果是这样:

 

       无论你把数组中的内容改成什么样子, 只要还是五个项, 输出的内容永远是这样的. 事实上在js中, 数组也是只是一个对象, 在对一个数组使用typeof命令的时候就会发现, 输出的是"object". 而加强for循环的本质其实是遍历这个对象的所有属性的名字, 再试一下这段代码:

 var obj = {
  name: 'jack',
  sex: 'boy'
};

for(var v in obj){
  //v 是属性名, obj[v]是引用该属性的内容
  document.write(v + ' : '+ obj[v] +'<br />');
}  

 结果:

 

   所以我们可以这样理解, 数组本身也只是一个对象, 它内部的每一个项只不过是数组对象的一个属性而已, 而属性名就是它的下标.

   说到这里, 还记得吗? js的特色是什么? ....一切皆对象啊!! 既然都是对象, 是不是可以把字符串, 数字, bool类型, 还有函数, 都按照这种方式拿去for 循环一下, 看看会出现什么结果?...嘿嘿...不过很遗憾, 我不得不告诉你, 什么都不会出现...除了字符串:

var str = 'jsckdao';

for(var v in str){
  document.write(v + ' : '+ str[v] +'<br />');
}  

 结果:

 

    看见了吧, 情况与数组一样. 其实也没什么好惊讶的, 字符串本来就是字符的数组嘛! 所以可以像引用数组元素一样应用字符串中的单个元素, 比如这样: str[3].

    只不过这个数组是只读的. 不信? 你可以修改一个值试试.

posted @ 2012-03-01 21:34  jsckdao  阅读(1071)  评论(0编辑  收藏  举报