`
hbyk3344
  • 浏览: 25058 次
  • 性别: Icon_minigender_1
  • 来自: 襄阳-》杭州
社区版块
存档分类
最新评论

JavaScript奇技淫巧之遍历数组

    博客分类:
  • web
阅读更多
正常的for循环就不提了,直接进入正题。如下:

view sourceprint?
1 //示例1 

2 for(var i=0,a;a=["jack","tom","lily","andy"][i++];){ 

3     console.log(a); 

4 } 

5 //示例2 

6 var ary = ["jack","tom","lily","andy"]; 

7 for(var i=0,a;a=ary[i++];){ 

8     console.log(a); 

9 }
从Firebug控制台能看到依次输出jack ,tom ,lily ,andy。这里有个问题,示例1不知是否会每次都产生一个数组对象实例,如果是,数组很大时可能会有性能问题。


这个技巧关键是这句

a = ary[i++];

JS中数组实际上也是一个普通的Object。属于索引数组且并非“连续分配”内存的,因此索引方法并不会带来很高的效率。
见 索引数组、关联数组和静态数组、动态数组

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

view sourceprint?
1 var ary = ["jack","tom","lily","andy"]; 

2 for(var a in ary) { 

3     console.log(a); 

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

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

view sourceprint?
1 for(var j=0;j<ary.length;j++) { 

2    console.log(ary.j);//undefined 

3 }

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

view sourceprint?
1 for(var atr in ary) { 

2     console.log(atr + ":" + typeof atr); 

3 }
输出如下:
0:string
1:string
2:string
3:string

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

view sourceprint?1 var obj = {}; 

2 obj.11 = 11; // 非法 

3 obj['11'] = 11; // 合法


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


分享到:
评论

相关推荐

    开源电子书《JavaScript奇技淫巧》,本书向您分享一系列新奇、有趣、有技术含量的 JavaScript 编程技术

    开源电子书《JavaScript奇技淫巧》,『奇技淫巧』一词出自古籍《书·泰誓下》,指新奇的技艺和作品。此词意与本书内容十分契合,因此书名借用该词。

    JavaScript奇技淫巧45招 _ 不可能不确定1

    JavaScript是世界上最流行的编程语言之一,尤其在Web开发领域中占据着核心地位。它不仅可以用于创建交互式的网页,还可以用于移动应用开发、服务器端编程(如Node.js)等。这篇文章总结了45个实用的JavaScript技巧、...

    JavaScript奇技淫巧44招【实用】

    JavaScript是世界上最受欢迎的编程语言之一,广泛应用于Web开发、移动应用和服务器端开发。学习和掌握JavaScript的一些小技巧,能够帮助开发者写出更高效、更健壮的代码。以下是一些实用的JavaScript奇技淫巧: 1. ...

    RocketMQ 奇技淫巧之 ServiceLoader 源码解读 - GitChat

    RocketMQ 奇技淫巧之 ServiceLoader 源码解读 抓下来打包成了HTML文件, 方便离线观看

    算法心得-高效算法的奥秘(原书第2版)_带书签_高清_[位运算的奇技淫巧].pdf

    《算法心得-高效算法的奥秘(原书第2版)》是一本深入探讨算法精髓的书籍,...书中的"位运算的奇技淫巧"部分,无疑是将这种技术运用到极致的探索,对于有志于提升算法水平的开发者来说,是一份不可多得的参考资料。

    来自小密圈里的那些奇技淫巧.pdf

    标题中提到的“来自小密圈里的那些奇技淫巧”可能是指在特定的技术圈子中分享的一些特殊技巧,用于突破安全限制和进行有效的攻击测试。以下将详细解释文档中提及的各个技巧: 1. EVAL长度限制突破技巧: 在PHP中,`...

    Python那些事——python的奇技淫巧

    Python,作为一门广受欢迎的编程语言,在...总之,Python的这些“奇技淫巧”展示了这门语言在实际编程中灵活多变的应用能力,对于学习和使用Python的开发者而言,了解这些技巧能够极大地提高开发效率和程序的用户体验。

    vue有哪些奇技淫巧.md

    vue有哪些奇技淫巧

    渗透中关于dns的奇技淫巧.pdf

    检测这种攻击的方法之一是观察DNS服务器的异常查询行为,如: - `dig . NS @你要日的dns` 防御DNS放大攻击的关键在于限制未经授权的区域传输和加强DNS服务器的安全配置。 4. **DNS注入、命令执行与隧道** 在某些...

    Git的奇技淫巧

    在协同开发中,`git rebase`是一个非常有用的工具,它可以将你的分支上的提交移动到最新的主分支之上,使得提交历史更简洁。然而,这应该在没有共享分支的情况下进行,因为rebase会改变提交的SHA哈希值,可能引发...

    Python 语言有什么奇技淫巧吗?.docx

    Python 语言奇技淫巧总结 Python 语言作为一种高效、灵活的编程语言,具有许多奇技淫巧,可以帮助开发者提高编程效率和代码质量。在本文中,我们将探讨 Python 语言中的四大奇技淫巧:循环代码优化、异常处理,以及...

    移动端Ui自动化上的正经奇技淫巧Havefun

    通过这些"奇技淫巧",我们可以提高测试效率,确保产品质量,并在JavaScript混合移动开发中取得更好的成果。文件"UiAuto-master"可能包含了实现这些技巧的代码示例和具体实施方案,值得进一步研究和学习。

    Javascript中的函数声明与函数表达式(奇技淫巧)

    JavaScript是一种动态类型的编程语言,它的灵活性使得开发者可以采用多种方式创建和使用函数。在JavaScript中,函数有两种主要的声明方式:函数声明(Function Declaration)和函数表达式(Function Expression)。...

    Go-Git的奇技淫巧

    在这个“Go-Git的奇技淫巧”中,我们将探讨一些高级和实用的Git技巧,以及如何使用Go来进一步操作Git。 1. **分支管理**:Git的分支机制允许开发者在同一项目上并行工作。`git branch`命令用于创建、查看和切换分支...

    CSS中边框使用负边距值的奇技淫巧

    标题“CSS中边框使用负边距值的奇技淫巧”暗示了负边距在CSS中的独特应用,这些应用可能并不常见,但能够解决特定的布局挑战。描述提到,通过负边距可以进行布局调整和实现元素重叠,这些都是设计师和开发者可以利用...

    bash奇技淫巧

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

    Git的奇技淫巧.zip

    Git是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个 功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。...

Global site tag (gtag.js) - Google Analytics