for...in循环因为历史遗留问题,它遍历的其实是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
于是当我们手动给Array对象添加了额外的属性后,for...in循环将会将新的属性跟之前的索引值一起循环出来。但是Array的length属性却不包括在内。
for...of循环则完全修复了这些问题,它只循环集合本身的元素。
for...in循环用于遍历对象属性,for...of用于遍历数据--比如数组中的单值
forEach用于调用数组的每个元素,并将元素传递给回调函数。