http://www.cnblogs.com/snandy/archive/2011/03/04/1970502.html
正常的for循环就不提了,直接进入正题。如下:
1
2
3
4
5
6
7
8
9
|
//示例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++]依然是一个普通对象取属性操作而已,试试看
1
2
3
4
|
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的属性,那么是否可以通过点运算符(.)来存取呢?试试看
1
2
3
|
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是字符串类型的。如下:
1
2
3
|
for ( var atr in ary) {
console.log(atr + ":" + typeof atr);
} |
输出如下:
0:string
1:string
2:string
3:string
鲜为人知的是用中括号[]存取时,JS引擎内部隐式的将数字转成了字符串。 而作为[]存取时属性可以不遵循JS标识符规则(纯数字不能作为变量命名)。如
1
2
3
|
var obj = {};
obj.11 = 11; // 非法
obj[ '11' ] = 11; // 合法
|
警示:这个for循环的缺陷是当数组元素是null,undefined,0,false等时会造成循环终止。要很清楚了解数组内存放的元素,否则会埋下BUG的伏笔
相关推荐
1、首次为变量赋值时务必使用var关键字 2、使用===取代== 3、underfined、null、0、false、NaN、空字符串的逻辑结果均为false
RocketMQ 奇技淫巧之 ServiceLoader 源码解读 抓下来打包成了HTML文件, 方便离线观看
JavaScript是一个绝冠全球的编程语言,可用于Web开发、移动应用开发(PhoneGap、Appcelerator)、服务器端开发(Node.js和Wakanda)等等。JavaScript还是很多新手踏入编程世界的第一个语言。既可以用来显示浏览器中...
Python 语言有什么奇技淫巧吗?.docxPython 语言有什么奇技淫巧吗?.docxPython 语言有什么奇技淫巧吗?.docxPython 语言有什么奇技淫巧吗?.docxPython 语言有什么奇技淫巧吗?.docxPython 语言有什么奇技淫巧吗?....
《Python那些事——python的奇技淫巧!》python2.7版本
算法心得-高效算法的奥秘(原书第2版)_带书签_高清_[位运算的奇技淫巧].pdf.
EVAL长度限制突破技巧 命令长度限制突破技巧 Mysql突破换行符的技巧 命令执行WAF绕过技巧 无字母数字Webshell构造技巧
bash奇技淫巧,长见识
DNS服务作为网络的一种基础架构,在网络中有举足轻重的地位。它担负着整个网络用户计算机的名称解析工作。没有正确的名称解析,服务器就无法识别各客户机。我们日常进行的浏览网页等上网活动,无一例外都在使用DNS...
收集到的一些src挖掘奇技淫巧
主要介绍了CSS中边框使用负边距值的奇技淫巧,文中介绍了使用负边距进行布局以及实现重叠等效果的方法,非常之巧妙,需要的朋友可以参考下
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符“~”乍一看...
移动端Ui自动化上的一些“奇技淫巧”;工作上总结的一些好用的东西在这里分享给大家 : )
主要介绍了ASP.NET Core 奇技淫巧之接口代理转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Git是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个 功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。...
主要介绍了大幅优化MySQL查询性能的方法,作者根据实际运行时间比对分析了InnoDB等几个重要的MySQL性能优化点,极力推荐!需要的朋友可以参考下
Git是一个“分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过“回撤”这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用“回撤”是找不回来的。