四、算法和流程控制

1、循环的分析

循环的类型,可以参考我之前的文章:《数组遍历的几种方法及用法》,除此之外,还有最基础的for循环,while循环,do while循环,以及遍历对象的for in 循环(for in循环遍历的顺序是按照键值对加入对象的时间从先到后遍历的,并且会遍历继承自原型的属性。建议用for of 遍历Object.keys()或者Objec)。

在这些循环/遍历的方法中,for循环、while循环、do while循环的方式,单次循环所需的时间最少,而for in遍历的方式是最慢的,因为for in循环的每次迭代都会从原型链上寻找。

虽然for循环、while循环、do while循环的性能消耗最少,但是,对于数组或者对象的遍历,通常情况下还是推荐forEach等数组/对象自带的遍历方式,因为这样代码看起来简洁很多。

在循环的迭代过程中,优化性能的第一步是减少对象成员或者数组项成员的查找次数。这可以通过之前介绍的使用局部变量缓存数据来达到。

值得一提的是,通常情况下,倒序循环会略微提升性能,所以,如果循环的顺序没有影响,可以考虑使用倒序。以这份代码为例:
《高性能javascript》学习笔记四_《高性能javascript》学习笔记四
下面的循环方式是更节约性能的。

每次循环时,上方的for循环会比较两次:与数组长度比较,然后判定结果是否为true;下方的for循环只会比较一次:这个值是否为true。

当循环次数复杂度为O(n)时