JavaScript循环for...in、for...of、iterator迭代器

for…in

for…in用于循环访问对象的所有可枚举属性.
可以用于数组字符串对象一起使用,
MapSet不能使用

  1. Array类型循环的是index下标
    for(let prop in ['a','b','c']){
        console.log(prop)   //0、1、2
    }
  1. string类型循环的是index下标
    for(let prop in 'congjiyong'){
        console.log(prop) //0、1、2、3、4、5、6、7、8、9
    }
  1. 循环的是对象的键,访问键值时使用:对象[键]
    var abc = {a:1,b:2,c:3}
    for(let prop in abc){
        console.log(prop);  //键 a、b、c
        console.log(abc[prop]); //键值 1、2、3
    }

for…of

用于迭代可迭代对象,迭代其值而不是属性。
可用于数组字符串MapSet可以使用
对象不能用

注意事项:在使用for…of遍历数据时, 要确保被遍历的数据, 拥有Iterator功能

  1. Array类型循环的是value值
    for(let val of ['a','b','c']){
        console.log(val) //a、b、c
    }
  1. string类型循环的是value值
    for(let val of 'congjiyong'){
        console.log(val) //c、o、n、g、j、i、y、o、n、g
    }
  1. 对象类型不能用
>     Uncaught TypeError: {(intermediate value)(intermediate value)(intermediate value)} is not iterable
  1. Set、Map可以使用
    for (let val of new Set(['a', 'b', 'a', 'd'])){
        console.log(val); //Set不能用重复的值,所以为 a、b、d 
    }

iterator

Iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制, 遍历器, 因为现在有Array /arguments/String/ Set / Map 4种结构, 所以ES6 加入了Iterator遍历器, 只要拥有这个Iterator遍历器, 就都可以使用for…of进行遍历,因为对象不能使用for…of所以使用iterator,下面的固定格式
作用:

  • 为各种数据结构,提供一个统一的、简便的访问接口
  • 使得数据结构的成员能够按某种次序排列
  • ES6创造了一种新的遍历命令for…of循环,Iterator接口主要供for…of使用
  • Iterator是一个抽象的概念, 具体的实现 for…of / Symbol.iterator
let obj = {
    a: 1,
    b: 2,
    c: 3
}
obj[Symbol.iterator] = function () {
    //迭代协议
    let values = Object.values(obj)   //1、Object.keys() 2、Object.values() 
    console.log(values)
    let index = 0;
    return {
        next() {
            if (index >= values.length) {
                return {
                    done: true  //结束循环,循环已经完成
                }
            }
            else {
                return {
                    value:values[index++],
                    done: false, //继续循环,循环未完成

                }
            }
        }
    }
}
for (let val of obj) {
    console.log(val)
}

arr.forEach

forEach可以循环访问数组的值value下标index

var arr = ['a','b','c']
arr.forEach((value,index,arr)=>{
    console.log(value);
    console.log(index)
})
  const s5 = new Set(['a', 'b', 'c']);
  s5.forEach(value => {
    console.log(value);
  })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CongJiYong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值