正常的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
相关推荐
网络奇技赢巧大搜捕 本书详细地介绍了包罗万象的网络基础知识,知识点非常丰富
在JavaScript中,监听元素的`resize`事件通常用于检测元素尺寸的变化,然而原生的`resize`事件只适用于`window`对象。这篇文章介绍了一种巧妙的技巧,利用`scroll`事件来监听除`window`之外的任何元素的大小变化。...
此视频乃奇技课堂金牌讲师张清美授课:软件测试实力进阶课程
神乎奇技的媒体播放软件,让你在低配置电脑下也能流畅播放DVDrip视频,本身编译自带了多种类型的解码器,不需要再安装xvid、ffdshow、ac3 filter、ogg、vobsub等等所谓看DVDrip必备解码器,也不会跟你的电脑原来所...
### bash奇技淫巧 #### 简介 在日常的Linux使用过程中,熟练掌握Bash的一些技巧可以极大地提升工作效率。本文将分享一系列实用的Bash小贴士,旨在帮助那些经常与Linux命令行打交道的人们更好地利用Bash的强大功能...
MPlayer被评为Linux下的最佳媒体播放工具,又成功地移植到Windows下。它能播放几乎所有流行的音频和视频格式,相对其它播放器来说,资源占用非常少,不需要任何系统解码器就可以播放各种媒体格式,对于MPEG/XviD/...
"Dreamweaver MX奇技7招巧做网页.txt"提到的Dreamweaver是一款流行的可视化网页编辑工具,它允许用户通过直观的界面设计和编写代码,对于初学者来说,是一个很好的学习和实践平台。 "垂直滚动网站的最新消息.txt...
6. **Google的奇技**:介绍Google特有的编程技巧和模式。 7. **其他C++特性**:探讨现代C++的特性,如模板、智能指针等。 8. **命名约定**:规定了变量、函数、类等的命名规则,增强代码可读性。 9. **注释**:提倡...
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 速成教程 根据:TypeScript 的语法是 ECMAScript ...语言始终是一种改进生产力的工具,陌生使用者最迫切的需求应该是快速掌握工具的使用,而不是在连工具都没学会使用的时候,就先沉迷于细枝末叶,奇技淫
#### 来自 Google 的奇技 谷歌提出了一些特定的编程技巧,如智能指针的使用、RAII(Resource Acquisition Is Initialization)原则,以及异常安全编程策略,这些都是提高代码健壮性的关键。 #### 其他 C++ 特性 ...
五、来自 Google 的奇技 * 所有权与智能指针:了解所有权和智能指针的概念和应用场景。 * Cpplint:了解 Cpplint 工具的作用和应用场景。 六、其他 C++ 特性 * 引用参数、右值引用和函数重载:了解引用参数、右值...
#### 五、来自Google的奇技 - **所有权与智能指针**:使用智能指针(如`std::unique_ptr`和`std::shared_ptr`)管理资源,以避免内存泄漏。 - **cpplint**:使用`cpplint`工具检查代码样式和潜在错误,以提高代码...