for...in,for...of,forEach以及三者的区别

 语法:

1、for...in循环:遍历数组或集合的

for(var 变量  in  数组名或集合名)  //变量中存放的数组或集合的索引
         {
            数组名[变量]
         }

2、for...of循环:遍历数组和集合

for(var 变量 of 数组名或集合名) //变量中存放的是数组或集合中的元素
         {
             console.log(变量);
         }

3、forEach循环

arr.forEach(function(k){  //依次从数组中取出元素放在k中,然后将k作为参数传递给函数
         console.log(k);
       })

区别:

for...in:

1.for…in以原始插入顺序访问对象的可枚举属性,包括从原型继承而来的可枚举属性。

2.for…in用于遍历数组时,可以将数组看作对象,数组下标看作属性名。但用for…in遍历数组时不一定会按照数组的索引顺序。代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。

3.某些情况下,会出现随机顺序的遍历,因为里面的值是string类型,所以增加了转换过程,因此开销较大

4.可以遍历数组的键名,遍历对象简洁方便

5.for…in不应该用于迭代一个 Array,其中索引顺序很重要。

//首先遍历对象
   let person={name:"张三",age:55,city:"西安"}
   let text=""
   for (let i in person){
      text+=person[i]
   }
   输出结果为:张三55西安

//其次在尝试一些数组
   let arry=[1,2,3,4,5]
   for (let i in arry){
        console.log(arry[i])
    }
//能输出出来,证明也是可以的

for...of:

1.for…of语句在可迭代对象(Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,为每个不同属性的值执行语句。

2.避免了for in的所有缺点,可以使用break,continue和return,不仅支持 数组的遍历,还可以遍历类似数组的对象,支持字符串的遍历,最简洁,最直接的遍历数组的语法。

3.不适用于处理原有的原生对象(原生对象是一个子集,包含一些在运动过程中动态创建的对象)

//遍历数组
   let arr=["Nice","to","meet","you"];
    for (let item of arr){
        console.log(item)
    }
//输出结果为Nice to meet you


//遍历对象
   let person={name:"里斯",age:23,city:"西安"}
   for (let item of person){
        console.log(item)
    }
//我们发现它是不可以的

forEach:

1.forEach方法对数组/Map/Set中的每个元素执行一次提供的函数。该函数接受三个参数:

(1)正在处理的当前元素,对于Map元素,代表其值;
(2)正在处理的当前元素的索引,对于Map元素,代表其键,对于Set而言,索引与值一样。
(3)forEach()方法正在操作的数组对象。

2.不能同时遍历多个集合,在遍历的时候无法修改和删除集合数据,方法不能使用break,continue语句跳出循环,或者使用return从函数体返回,对于空数组不会执行回调函数

3.便利的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少了出错的效率

4.forEach执行后的返回值为undefined

5.forEach不改变原数组

6.想要实现返回筛选的结果可以结合filter

//我们先用它来遍历数组
  let arry=[9,8,7,6,5,4]
  array.forEach(function(value,index,arr){
      console.log(value)
  })
//输出结果为9 8 7 6 5 4

//首先有人疑问它能不能用来遍历对象(一开始我也不知道)?
//我们用它来遍历对象试试可不可以
   let obj={a:1,b:2,c:3,d:4}
   obj.forEach(function(value,index,oObj){
       console.log(value)
   }
//输出结果会是obj.forEach is not a function,
//所以forEach不可以遍历对象,这也是它和for in的一个区别
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陛下,再来一杯娃哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值