for in
1.循环遍历的值都是数据结构的键值,它可以循环数组也能循环对象.
2.它遍历数元素的时候,除了遍历数组元素外,还会遍历[自定义]的属性.
3.在某些情况下,可能按照随机顺序遍历数组元素.
4.综合1,2,3一般用来遍历对象,不用来遍历数组
for of
1.可以避免for in循环中的陷阱
2.不同于forEach,它可以使用return,break,continue来终止循环
3.它不仅仅支持数组的遍历,同时也适用于很多类似数组的对象
4.还可遍历字符串
5.并不能处理原有的而原生对象
6.他不能遍历一个普通的对象,只有在对象中部署了 Symbol.iterator 属性(也就是可迭代), 才具有iterator接口可以使用 for of循环
7.如果不部署Symbol.iterator 属性,想遍历普通对象,需要联合Object.keys()来使用
forEach
1.不能使用return,break,continue来终止循环
2.在回调函数内不管传入任何形式 的参数,都会返回undifind
3.在回调函数内部有三个参数,item,index,arr分别代表,当前项,当前项的下标,数组本身.
4.它会对数组的每一个元素执行一次提供的函数,不改变原数组,没有返回值undifind
代码展示
综上所诉,对象使用for in 遍历, 数组使用for of 遍历较为好,数组遍历不需要终止循环就使用forEach更为方便