for of 是 ES6 出的一个遍历数组元素的方法,和for in 的区别在对于前面遍历数组的值;后者遍历数组(对象)的键(包括从父级继承的键),遍历对象是且会按照添加的顺序遍历。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Object.prototype.name = 'Lili'
const o = { __proto__: { e: 12, }, b: 12, c: 10, a: 8, } for (const i in o) { console.log(i) // b c a e name } const arr = [1, 2, 3] for (const i in arr) { console.log(i) // 0 1 2 3 name }
当我们尝试用 for of 遍历一个对象时,会报错 TypeError: o is not iterable,这里因为 for of 其实会调用对象的 Symbol.iterator 方法,这个属性是一个迭代器 所以我们可以尝试实现一个对象的 Symbol.iterator 迭代器