话不多说,上代码及展示结果,
let arr = new Array();
for(let i = 0, len = 1000000;i < len; i++){
arr.push(i);
}
function foradd(my_arr){
let sum = 0;
for(let i = 0; i < my_arr.length; i++){
sum += my_arr[i];
}
}
function forinadd(my_arr){
let sum = 0;
for(let key in my_arr){
sum += my_arr[key];
}
}
function forofadd(my_arr){
let sum = 0;
for(let val of my_arr){
sum += val;
}
}
function timeTest(func,my_arr,str) {
var start_time = null;
var end_time = null;
start_time = new Date().getTime();
func(my_arr);
end_time = new Date().getTime();
console.log(str,(end_time - start_time).toString());
}
timeTest(foradd,arr,'foradd');
timeTest(forinadd,arr,'forinadd');
timeTest(forofadd,arr,'forofadd');
数组里有若干数,并将其累加,最后输出,分别使用三种遍历方法,
输出遍历完成的时间差,结果如下所示:
由结果可以看到性能高低为;
for > for...of > for...in
而且for循环本身比较稳定
原因是for...in需要穷举对象的所有属性,包括自定义的添加的属性也能遍历到
且for...in的key是String类型,有转换过程,开销比较大
但是for循环的i是Number类型,开销较小