es6遍历器
介绍
- 遍历器Iterator是一种接口,为各种不同的数据结构提供统一的访问机制,即for...of循环。
任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。 - ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性。
一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”,可以用for...of来进行遍历。 - es6原生具备 Iterator 接口的数据结构有:数组,Map,Set,String,类数组对象。
除此之外,其他数据结构的 Iterator 接口,都需要自己在Symbol.iterator属性上面部署,这样才会被for...of循环遍历。
- Symbol.iterator属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器对象。
- Symbol.iterator方法的最简单实现,还是使用Generator 函数。
- next() //必须有
let arr = ['a', 'b', 'c'];
let iter = arr[Symbol.iterator]();
console.log(iter.next())//{ value: 'a', done: false }
console.log(iter.next())//{ value: 'b', done: false }
console.log(iter.next())//{ value: 'c', done: false }
console.log(iter.next())//{ value: undefined, done: true }let someString = "hi";
console.log(typeof someString[Symbol.iterator])//function
var iterator = someString[Symbol.iterator]();
console.log(iterator.next())//{ value: 'h', done: false }
console.log(iterator.next())//{ value: 'i', done: false }
console.log(iterator.next())//{ value: undefined, done: true }
- return() //可选
如果for...of循环提前退出,就会调用return方法。 - throw() //可选
throw方法主要是配合 Generator 函数使用,一般的遍历器对象用不到这个方法。
- 解构赋值会默认调用Symbol.iterator方法。
- 扩展运算符会默认调用Symbol.iterator方法。
- yield*后面跟的是一个可遍历的结构,它会调用该结构的遍历器接口。
- 任何接受数组作为参数的场合,其实都调用了遍历器接口。
- 有着同for...in一样的简洁语法,但是没有for...in缺点。
- 它可以与break、continue和return配合使用。
- 提供了遍历所有数据结构的统一操作接口。
const arr = ['red', 'green', 'blue'];
arr.foo = 'hello';
for (let a in arr) {
console.log(a);
// 0 1 2 foo
}
for (let v of arr) {
console.log(v);
// red green blue
}
//for...in循环读取键名,for...of循环读取键值。
对于普通的对象,for...of结构不能直接使用,会报错,必须部署了 Iterator 接口后才能使用。
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 人生感悟记#环境仪器宋庆国成长记#072
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- (二)ES6第一节变量(let|(二)ES6第一节变量(let,const)
- 六步搭建ES6语法环境
- 视频转换器哪种好用()
- NeuVector 会是下一个爆款云原生安全神器吗()
- 操作系统|[译]从内部了解现代浏览器(1)
- 探索免费开源服务器tomcat的魅力
- 机器学习|机器学习 Andrew Ng《Machine Learning》课程笔记1