在es6中,引入了新的Map和Set对象,Array可以通过下标遍历,而Map和Set无法通过下标遍历。为了统一集合,es引入了新的iterable类型,Array,Map,Set类型都属于iterable。
讲讲常用的几种遍历方法。
1.for..in
var a = [1,2,3];
for(var index in a ){
console.log(index);
console.log(a[index]);
}
上面分别输出0,1,2 1,2,3
只有Array能有for..in Map和Set都不能使用,for..in遍历的是索引
2.for..of
for(var x of a){
console.log(x);
}
var d = new Set(['A', 'B', 'C']);
for(var dd of d){
console.log(dd);
}
for..of遍历的是值
这是上面运行的结果。
for..of 与 for..in的区别
for..of是es6新引入的概念,
for ... in
循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个
Array
数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
当我们手动给
Array
对象添加了额外的属性后,
for ... in
循环将带来意想不到的意外效果:
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
console.log(x); // '0', '1', '2', 'name'
3.foreach()方法
var s = new Set(['hxy','yyw','zz']);
s.forEach(function (element,sameElement,set) {
console.log(element);
})
var s2 = new Map([[1,'hxy'],[2,'yyw'],[3,'zzh']]);
s2.forEach(function (value,key,map) {
console.log(key+":"+value);
})