【简介】JavaScript 定义了四种基本循环类型,for、for-in、while、do-while。这四种之中,for-in 性能比较弱,但它能获取未知对象的属性。
代码的整体结构是影响运行速度的主要因素之一。代码数量少并不意味着运行速度就快,代码数量多也不意味着运行速度一定慢。代码的组织结构和解决具体问题的思路是影响代码性能的主要因素。
1. 循环(Loops)
1-1. 循环类型(Types of Loops)
JavaScript 定义了四种循环类型。
第一种 —— 标准 for 循环:
for (var i = 0; i < 10; i++) {
// 循环主体
}
第二种 —— while 循环:
var i = 0;
while(i < 10) {
// 循环主体
i++;
}
第三种 —— do-while 循环:
var i = 0;
do {
// 循环主体
} while (i++ < 10);
第四种 —— for-in 循环:
for( var prop in object) {
// 循环主体
}
有以下几点说明一下:
- for 初始化中的 var 语句会创建一个函数级的变量,即在 for 循环中定义一个新变量相当于在循环体外定义一个新变量。
所以上面的 for 实际上是这样一个过程:
var j = 0;
for ( ; j<10; j++){
// 循环主体
}
对于多个变量的初始化,我们也可以这样写:
for (var i = 0,len = arr.length; i < len; i++) {
// 循环主体
}
for 循环是前测条件循环,即先判断条件是否满足,满足的情况下,执行循环体,后面的 while 循环也是。而 do-while 循环则是后测条件循环,即先执行一次循环体,然后再判断条件是否满足。
for-in 循环有一个非常特别的用途:枚举任何对象的属性名。
var obj = {
name:"jack",
age : 23
}
for(var prop in obj){
console.log(prop);
}
输出:
name demo.html:57
age demo.html:57
1-2. 循环性能(Loop Performance)
不断引发循环性能争论的源头是循环类型的选择。在 JavaScript 提供的四种循环类型中,只有 for-in 循环比其他几种明显要慢。除了 for-in 循环外,其他循环类型的性能都差不多。
由于每次迭代操作都会同时搜索实例或原型属性,for-in 循环的每次迭代都会产生更多的开销,所以比其他循环类型要慢。对比相同迭代次数的循环,for-in 循环最终只有其他类型速度的1/7.因此,除非明确需要迭代一个属性数量未知的对象,否则应避免使用 for-in 循环,更不要用 for-in 来遍历数组。
附: 欢迎大家关注我的新浪微博 - 一点编程,了解最新动态 。