es6新增-iterator遍历器,for..of循环

目录

一.interator遍历器

1.作用

2.具备iterator接口的数据结构如下:

3.iterator遍历器的原理

4.Iterator遍历器的执行机制

 5.加强

一.for...of 循环

                for .. of 实现原理


一.interator遍历器

1.作用

  • 为各种数据结构, 提供一个统一的,便捷的访问接口
  • 供for...of消费

2.具备iterator接口的数据结构如下:

  • Array/类数组
  • String
  • Set
  • Map

3.iterator遍历器的原理

es6规定,默认的iterator接口部署在数据结构的Symbol.iterator(独一无二的数据类型属性)属性,或者说,一个数据结构只要具有Symbol,iterator属性,就是"可遍历的"

4.Iterator遍历器的执行机制

const arr = [ "虎","虎","生","威" ]

1:得到遍历器对象,本质就是一个指针对象

const iter = arr[Symbol.iterator]()

console,log(iter)

2:调用next方法,指针指向数据结构的第一个成员.后续以此类推

具体来说,就是返回一个包含value和done两个属性的对象.

其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束.

console.log(iter.next() )

console.log(iter.next() )

console.log(iter.next() )

console.log(iter.next() )

console.log(iter.next() )

 5.加强

const str = "2022"

const iter = str[Symbol.iterator]()

console.log(iter.next() )

console.log(iter.next() )

console.log(iter.next() )

console.log(iter.next() )

console.log(iter.next() )

const obj = {

a:1, b:2, c:3 } 

obj.[Symbol.iterator]()

对象上面没有部署Symbol.iterator属性  

一.for...of 循环

一个数据结构只要内部部署了Symbol.iterator属性,可以用for..of循环遍历他的成员,也就是说,for..of循环内部调用的是数据结构的Symbol.iterator方法.

for..of循环可以使用的范围包括数组,Set和Map结构.

某些类似数组的对象(如arguments对象,DOM NodeList对象),Genderator对象,以及字符串.

和es5遍历对象的for .. in 类似

const arr = ["虎","虎","生","威"] 

for(let item of arr){ console.log(item) }

 const str = "2022"

for(let item of str){ console.log(item) }

 const obj = { a:1 ,b:2, c:3 }

for(let item of obj){ console.log(item) } 报错 原因:对象不可迭代

for .. of 实现原理

const obj = { a:1 ,b:2, c:3 }

obj[Symbol.iterator] = function(){

let i = 0;

const keys = Object.keys(this)

return {

next:()=>{

return i <= keys.length = 1 ? { value:this[keys[i++]] } : {value:undefined, done:true  }  }  }  }

for(let v og obj ){console.log(v)}

const obj = { a:1 ,b:2, c:3 }

obj[Symbol.iterator] = function(){

let i = 0;

const keys = Object.keys(this)

return {

next:()=>{

return i <= keys.length = 1 ? { value:keys[i++] } : {value:undefined, done:true  }  }  }  }

for(let v og obj ){console.log(v)}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值