首页 技术 正文
技术 2022年11月17日
0 收藏 852 点赞 2,357 浏览 1483 个字

1.任何数据结构只要部署了Iterator接口(本质是一个指针对象),也就是部署了Symbol.iterator属性,便可以完成遍历操作;数组原生就具备Iterator接口,就可以用for…of遍历。由于Iterator只是把接口规格加到数据结构之上,所以,遍历器与它所遍历的那个数据结构,实际上是分开的。

2.Iterator遍历过程:

– 创建一个指针对象,指向当前数据结构的起始位置;

– 调用next方法,可以将指针指向数据结构的第一个成员,返回一个包含value和done属性的对象;

– 继续调用next方法,……以此类推,直到指向结束位置。

//mock iterator
function makeIterator(array) {
var nextIndex = 0;
return {
next: function() {
return nextIndex < array.length ?
{value: array[nextIndex++], done: false} :
{value: undefined, done: true};
}
};
}var arr = makeIterator([1, 2, 3]);arr.next(); //{value: 1, done: false}
arr.next(); //{value: 2, done: false}
arr.next(); //{value: 3, done: false}
arr.next(); //{value: undefined, done: true}

3.调用Iterator的场合(即会默认调用Symbol.iterator):

– 解构赋值

– 扩展运算符(…)

– yield*(后面跟一个可遍历的结构)

– 任何接收数组作为参数的场合(for…of等)

4.字符串也具有Iterator接口(typeof str[Symbol.iterator] === ‘function’)

5.Symbol.iterator可以用Generator函数实现,只要用yield命令给出每一步的返回值即可。

var obj = {};
obj[Symbol.iterator] = function* () {
yield 1;
yield 2;
}[...obj] // [1, 2]

6.for…of适用于数组、Set、Map、类数组对象(arguments、nodelist)、Generator、字符串。

7.for…in 和 for…of

– 前者只能获取对象的键名,后者可以得到键值;

– 对于数组,前者可以返回数组上的所有属性,后者只能返回具有数字索引的属性;

let arr = ['a', 'b', 'c'];
arr.d = 'hello';for (let i in arr) {
console.log(i); // '0', '1', '2', 'd'
}for (let i of arr) {
console.log(i); // 'a, 'b', 'c'
}

– 前者主要为遍历对象而设计;不适用与遍历数组;

– 后者不同于foreach,可与break、continue、return配合使用;提供了遍历所有数据结构的统一接口。

8.iterator对象除了next方法,还有return、throw,而return必须返回一个对象。

9.fibonacci

var fib = {
[Symbol.iterator](){
let pre=0,cur=1;
return {
next(){
[pre, cur] = [cur, pre+cur];
return {done: false,value: cur};
}
}
}
}
for(var i of fib){
if(i>100)
break;
console.log(i)
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893