测试事例(性能对比):
终端前面部分是没有加入红框中的代码
如上图, 明显for循环比for in 性能高很多(原因是因为for通过number遍历,for in 则是穷举所有索引)
其实for 与 for in 还有其它区别:
1、for中的i是number类型,for in中的 key是string类型;
2、如果扩展了js 的原生Array,for in 会将其遍历,出现错误结果;
3、如果遍历js对象,需要用for in。
测试代码:
var s,d;
var arr = [];
for (var index = 0, len = 10000000; index<len; index++) {
arr.push(index);
}
//Array.prototype.test=function(){
//
//};
function forSum(arr) {
var i = 0,
sum = 0,
l = arr.length;
for (; i<l; i++) {
if (i == 0){
console.log(typeof i);
}
sum += arr[i];
}
}
function forInSum(arr){
var sum = 0;
for (var key in arr){
if (key == 0){
console.log(typeof key);
}
sum += arr[key];
}
}
function performanceTest(func,param){
s = new Date().getTime();
func(param);
d = new Date().getTime();
console.log((d-s).toString());
}
performanceTest(forSum,arr);
performanceTest(forInSum,arr);