-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIterator.html
80 lines (71 loc) · 2.06 KB
/
Iterator.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Iterator(遍历器)的概念
主要是数组(Array)和对象(Object),ES6 又添加了Map和Set
遍历的方式
const obj = {
[Symbol.iterator] : function () {
return {
next: function () {
return {
value: 1,
done: true
};
}
};
}
};
next方法返回一个对象,表示当前数据成员的信息。这个对象具有value和done两个属性,value属性返回当前位置的成员,
done属性是一个布尔值,表示遍历是否结束,即是否还有必要再一次调用next方法。
对于遍历器对象来说,done: false和value: undefined属性都是可以省略的
默认 Iterator 接口
Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制
,即for...of循环(详见下文)。当使用for...of循环遍历某种数据结构时,该循环会自动去寻找 Iterator 接口
对象(Object)没有默认部署 Iterator 接口
原生具备 Iterator 接口的数据结构如下。
Array
Map
Set
String
TypedArray
函数的 arguments 对象
NodeList 对象
<script>
//遍历
let obj = {
data: [ 'hello', 'world' ],
[Symbol.iterator]() {
const self = this;
let index = 0;
return {
next() {
if (index < self.data.length) {
return {
value: self.data[index++],
done: false //true 则不返回 则,没有结束 false 则不反悔
};
} else {
return { value: undefined, done: true };
}
}
};
}
};
let iter2 = obj[Symbol.iterator]();
iter2.next()//{value: "hello", done: false}
for (var i of obj){
console.log(i); // 1, 2, 3
}
let arr = ['a', 'b', 'c'];
let iter = arr[Symbol.iterator]();
debugger
iter.next() // { value: 'a', done: false }
iter.next() //
</script>
</body>
</html>