JS遍历性能比较(for与for...in以及for...of)

话不多说,上代码及展示结果,

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');

数组里有若干数,并将其累加,最后输出,分别使用三种遍历方法,

输出遍历完成的时间差,结果如下所示:

JS遍历性能比较(for与for...in以及for...of)_第1张图片

由结果可以看到性能高低为;

for > for...of > for...in

而且for循环本身比较稳定

原因是for...in需要穷举对象的所有属性,包括自定义的添加的属性也能遍历到

且for...in的key是String类型,有转换过程,开销比较大

但是for循环的i是Number类型,开销较小

你可能感兴趣的:(js,学习,遍历性能,数组遍历)