咱们都知道在 JavaScript 中 for...in 和 for...of 均可以迭代一个数组,但他们之间也有着很大的区别:javascript
for...in 和 for...of 最明显的区别莫过于他们用于迭代器的返回值不一样,for...in 迭代的是对象的键,而 for...of 迭代的是对象的值。咱们能够经过下面的例子对两者进行区分:java
const array = [3,4,5] for (let i in array) { console.log(i) //0,1,2 } for (let i of array) { console.log(i) //3,4,5 }
另外一个区别在于,for...in 能够操做任何对象,提供了查看对象属性的一种方法。可是 for...of 关注迭代对象的值,内置对象Map和Set已经实现了Symbol.iterator 方法,让咱们能够访问它们的值:数组
const fruits = new Set(['apple','pear','mango']) fruits['peach'] = 'Princess Peach! Make a wish!' for(let fruit in fruits) { console.log(fruit) //peach } for (let fruit of fruits) { console.log(fruit) //apple pear mango }
可是这样的特性仅仅在 ES6 及以上才生效。app