JavaScript中forEach,for in,for of的区别

在学习TypeScript时,又遇见了for of,一直以来对于这三者之间的区别都有些模糊,现在就通过几个简单的例子,做一下系统的区分。 上代码:

var arr = [1,2,3,4,5,6];
console.log(arr);

运行结果: 先简单输出一下,方便接下来进行比较;

一:forEach()

var arr = [1,2,3,4,5,6];
arr.forEach(function(value){
    console.log(value);
});

运行结果: 尝试添加break语句,报错信息如下: 分析: 使用forEach方法可以将数组中的元素进行循环遍历输出;但是有一个缺点就是他不能在某一个条件下跳出循环。

二:for in

var arr1 = [11,22,33,44,55,66];
for (var n in arr1){
    console.log(n);
};

运行结果为: 卧槽????? 什么情况??循环中输出的n竟然不是数组中的元素。 在使用for in循环时,循环的n是下标!是数组的键值。 修改代码:

var arr1 = [11,22,33,44,55,66];
for (var n in arr1){
    console.log(arr1[n]);
};

运行结果: 分析: 此时已经可以正常输出数组的元素了; 在使用for in循环时,他循环的是数组集合中的下标,即键的名字;在js中每一个对象和数组都是一个个键值对的集合,在这个数组中一共有6个键值对,那么他所循环的就是数组的键Key而不是value; for in循环的方法虽然可以用来遍历数组,但是他被设计出来实际上是为了遍历对象的属性的;因此:for in的作用是遍历对象【注意for in有时会遍历出一些你不想要的东西,他会把原型中的属性方法遍历出来,有一种恶心的感觉】

var obj = {
    arr1:[1,2,3],
    arr2:[3,4,5],
    age:12,
    name:"zs"
};
for(var n in obj){
    console.log(n + ":" + obj[n]);
}

运行结果为:

三: for of

在forEach和for in的基础上ES6做出了拓展,而身为JavaScript的超集TypeScript他也包含了for of的强大功能: 1:他可以在满足一定条件的情况下退出循环(弥补forEach的缺陷)

var arr2 = [11,22,33,44,55,66];
for (var n of arr2){
    if (n > 3){
        break;
    }
    console.log(arr2[n]);
}

运行结果: 分析: 从上述可以看出for of的遍历基础仍然是key值; 而且他也可以在满足一定条件的情况下break出来; 在TypeScript中的for of循环中不会像for in循环一样将不该遍历的遍历出来;

总结

1:forEach 缺点是不能够break; 2:for in虽然可以用来遍历数组,但是他主要是用来遍历对象的;而且他还会将原型中的方法遍历出来; 3:for of是这两者的强化版,可以break,也不会遍历出原型中的东西;

简单的将这三者进行自认为系统的总结,如果有错误非常欢迎能够指正

经验分享 程序员 微信小程序 职场和发展