前言:大家都知道遍历数组的方法,但是我们如果想要遍历没有下标的集合,对象,可以用什么方法呢?之前了解到了for...in ,for...of可以来遍历集合,对象,但是对于他俩的区别,一直有点迷。。。
我们知道的集合array,map,set,其中array有下标,可以直接遍历。为了统一集合类型,ES6标准引入了新的iterable
(迭代)类型,Array
、Map
和Set
都属于iterable
类型。具有iterable
类型的集合可以通过新的for ... of
循环来遍历。
你可能会有疑问,for ... of
循环和for ... in
循环有何区别?
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'
}
for ... in
循环将把name
包括在内,但Array
的length
属性却不包括在内。
for ... of循环则完全修复了这些问题,它只循环集合本身的元素:
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
console.log(x); // 'A', 'B', 'C'
}