Skip to content

Commit 78aea39

Browse files
Map & Set
1 parent f179fec commit 78aea39

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
</head>
6+
<body>
7+
<script type="text/javascript">
8+
// Array可以使用下标,Map和Set不能使用下标,ES6引入了iterable类型,Array,Map,Set都属于iterable类型,它们可以使用for...of循环来遍历:
9+
var a = ['A', 'B', 'C'];
10+
var s = new Set(['A', 'B', 'C']);
11+
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
12+
for (var x of a) { // 遍历Array
13+
console.log(x);
14+
}
15+
for (var x of s) { // 遍历Set
16+
console.log(x);
17+
}
18+
for (var x of m) { // 遍历Map
19+
console.log(x[0] + '=' + x[1]);
20+
}
21+
22+
// 【 for...of 与 for...in 的区别 】
23+
// for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。当手动给Array对象添加了额外的属性后,for ... in 循环将带来意想不到的意外效果
24+
var a = ['A', 'B', 'C'];
25+
a.name = 'Hello';
26+
for (var x in a) {
27+
console.log(x); // '0', '1', '2', 'name'
28+
}
29+
30+
var a = ['A', 'B', 'C'];
31+
a.name = 'Hello';
32+
for (var x of a) {
33+
console.log(x); // 'A', 'B', 'C'
34+
}
35+
36+
// 更好的方式:iterable内置的forEach方法:
37+
var a = ['A', 'B', 'C'];
38+
a.name = 'Hello';
39+
a.forEach(function (element, index, array) {
40+
// element: 指向当前元素的值
41+
// index: 指向当前索引
42+
// array: 指向Array对象本身
43+
console.log(element);//'A','B','C'
44+
});
45+
46+
var s = new Set(['A', 'B', 'C']);
47+
s.forEach(function (element, sameElement, set) {
48+
console.log("参数1="+element+",参数2="+sameElement);
49+
});
50+
//参数1=A,参数2=A
51+
//参数1=B,参数2=B
52+
//参数1=C,参数2=C
53+
54+
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
55+
m.forEach(function (value, key, map) {
56+
console.log("参数1="+value+",参数2="+key);
57+
});
58+
//参数1=x,参数2=1
59+
//参数1=y,参数2=2
60+
//参数1=z,参数2=3
61+
62+
</script>
63+
</body>

0 commit comments

Comments
 (0)