for...in迭代和for...of有什么区别

242 阅读2分钟

遍历数组通常用for循环

       ES5也可以使用forEach,ES5具有遍历数组功能的还有map、filter 、some、every、reduce等,只不过他们的返回结果不一样。但是使用foreach遍历数组的话,使用break不能中断循环,使用return也不能返回到外层函数

for in 遍历数组缺点

       1.   index索引为字符串型数字,不能直接进行几何运算

       2.   遍历顺序有可能不是按照实际数组的内部顺序

       3.   使用for in 会遍历数组所有的可枚举属性,包括原型。

     for in更适合遍历对象,不要使用for in遍历数组

for of遍历

         for of 适用遍历数组对象/字符串/map/set等拥有迭代器对象的集合,但是不能遍历对象,因为没有迭代器对象,与foreach()不同的是,它可以正确响应break、continue和return语句

  •  关于数组中map与foreach的区别:  map有一个返回值,foreach则没有返回值

     相同点:每次执行匿名函数都支持3个参数,参数分别是item(当前每一项),index(索引值),arr(原数组)

      区别: map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。map方法不会对空数组进行检测,map方法不会改变原始数组。若arr为空数组,则map方法返回的 也是一个空数组; forEach方法用来调用数组的每个元素,将元素传给回调函数;forEach对于空数组是不会调用回调函数的。无论arr是不是空数组,forEach返回都是undefined.

       并且map的{ }里加其return 字符时,会返回与元素组等长度的由字符元素组成的数组,而forEach还是返回一个undefined