`

JavaScript奇技之遍历数组

阅读更多

        正常的for循环就不提了,直接进入正题。如下:

//示例1 
for(var i=0,a;a=["jack","tom","lily","andy"][i++];){ 
    console.log(a); 
} 
//示例2 
var ary = ["jack","tom","lily","andy"]; 
for(var i=0,a;a=ary[i++];){ 
    console.log(a); 
}

        从Firebug控制台能看到依次输出jack ,tom ,lily ,andy。这里有个问题,示例1不知是否会每次都产生一个数组对象实例,如果是,数组很大时可能会有性能问题。
        这个技巧关键是这句:a = ary[i++];
        JS中数组实际上也是一个普通的Object。属于索引数组且并非“连续分配”内存的,因此索引方法并不会带来很高的效率。

        括号[i++]依然是一个普通对象取属性操作而已,试试看

var ary = ["jack","tom","lily","andy"]; 
for(var a in ary) { 
    console.log(a); 
}

        Firebug控制台输出0,1,2,3。证明了0,1,2,3的确是数组ary的属性。

        既然是ary的属性,那么是否可以通过点运算符(.)来存取呢?试试看

for(var j=0;j<ary.length;j++) { 
   console.log(ary.j);//undefined 
}

        为什么示例1,2中用中括号[]存取就可以了呢?因为中括号ary[0],ary[1],ary[2],ary[3]里的0,1,2,3是字符串类型的。如下:

for(var atr in ary) { 
    console.log(atr + ":" + typeof atr); 
}

        输出如下:

0:string 
1:string 
2:string 
3:string

        鲜为人知的是用中括号[]存取时,JS引擎内部隐式的将数字转成了字符串。 而作为[]存取时属性可以不遵循JS标识符规则(纯数字不能作为变量命名)。如

var obj = {}; 
obj.11 = 11; // 非法 
obj['11'] = 11; // 合法

        警示:这个for循环的缺陷是当数组元素是null,undefined,0,false等时会造成循环终止。要很清楚了解数组内存放的元素,否则会埋下BUG的伏笔。

 

文章来源:http://www.cnblogs.com/snandy/archive/2011/03/04/1970502.html

分享到:
评论

相关推荐

    网络奇技赢巧大搜捕

    网络奇技赢巧大搜捕 本书详细地介绍了包罗万象的网络基础知识,知识点非常丰富

    JS奇技之利用scroll来监听resize详解

    在JavaScript中,监听元素的`resize`事件通常用于检测元素尺寸的变化,然而原生的`resize`事件只适用于`window`对象。这篇文章介绍了一种巧妙的技巧,利用`scroll`事件来监听除`window`之外的任何元素的大小变化。...

    2019-08-20 184053(1).mov

    此视频乃奇技课堂金牌讲师张清美授课:软件测试实力进阶课程

    MPlayer-CVS-20051119-KK.rar

    神乎奇技的媒体播放软件,让你在低配置电脑下也能流畅播放DVDrip视频,本身编译自带了多种类型的解码器,不需要再安装xvid、ffdshow、ac3 filter、ogg、vobsub等等所谓看DVDrip必备解码器,也不会跟你的电脑原来所...

    bash奇技淫巧

    ### bash奇技淫巧 #### 简介 在日常的Linux使用过程中,熟练掌握Bash的一些技巧可以极大地提升工作效率。本文将分享一系列实用的Bash小贴士,旨在帮助那些经常与Linux命令行打交道的人们更好地利用Bash的强大功能...

    MPlayer-SVN-36530-WW(20140124)美化汉化绿色精简版_是神乎奇技的媒体播放软件

    MPlayer被评为Linux下的最佳媒体播放工具,又成功地移植到Windows下。它能播放几乎所有流行的音频和视频格式,相对其它播放器来说,资源占用非常少,不需要任何系统解码器就可以播放各种媒体格式,对于MPEG/XviD/...

    HTML入门经典(HTML,CSS以及其它HTML技巧汇总)

    "Dreamweaver MX奇技7招巧做网页.txt"提到的Dreamweaver是一款流行的可视化网页编辑工具,它允许用户通过直观的界面设计和编写代码,对于初学者来说,是一个很好的学习和实践平台。 "垂直滚动网站的最新消息.txt...

    Google 7个编程指南中文版合集

    6. **Google的奇技**:介绍Google特有的编程技巧和模式。 7. **其他C++特性**:探讨现代C++的特性,如模板、智能指针等。 8. **命名约定**:规定了变量、函数、类等的命名规则,增强代码可读性。 9. **注释**:提倡...

    google C++ 风格指南 - 中文版

    4. 来自 Google 的奇技 4.1. 智能指针 4.2. cpplint 5. 其他 C++ 特性 5.1. 引用参数 5.2. 函数重载 5.3. 缺省参数 5.4. 变长数组和 alloca() 5.5. 友元 5.6. 异常 5.7. 运行时类型识别 5.8. 类型转换 5.9...

    typescript-tutorial:TypeScript速成教程(2小时速成)

    TypeScript 速成教程 根据:TypeScript 的语法是 ECMAScript ...语言始终是一种改进生产力的工具,陌生使用者最迫切的需求应该是快速掌握工具的使用,而不是在连工具都没学会使用的时候,就先沉迷于细枝末叶,奇技淫

    含笔记标注的谷歌中文翻译文件

    #### 来自 Google 的奇技 谷歌提出了一些特定的编程技巧,如智能指针的使用、RAII(Resource Acquisition Is Initialization)原则,以及异常安全编程策略,这些都是提高代码健壮性的关键。 #### 其他 C++ 特性 ...

    c++相关知识分享。。。

    五、来自 Google 的奇技 * 所有权与智能指针:了解所有权和智能指针的概念和应用场景。 * Cpplint:了解 Cpplint 工具的作用和应用场景。 六、其他 C++ 特性 * 引用参数、右值引用和函数重载:了解引用参数、右值...

    Google-CPP 编码规范(中文版)最新版.pdf

    #### 五、来自Google的奇技 - **所有权与智能指针**:使用智能指针(如`std::unique_ptr`和`std::shared_ptr`)管理资源,以避免内存泄漏。 - **cpplint**:使用`cpplint`工具检查代码样式和潜在错误,以提高代码...

Global site tag (gtag.js) - Google Analytics