因为for of遍历依靠的是遍历器Iterator。
for…of正常遍历,都需要实现一个遍历器Iterator(说到遍历器:也就是迭代器Iterator
补充一下概念:
什么是迭代器?
迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果
迭代器:迭代取值的工具
为什么要用迭代器?
迭代器给你提供了一种不依赖索引取值的方式
)
它们的原型中都有一个Symbol.iterator方法。
内置对象是可迭代的这些
1)数组Arrays2)字符串Strings 3)Map4)Set5)arguments6)Typed Arrays7)Generators,早就内置好了Iterator(迭代器),所以它们可以被for of遍历。
而Object对象本身没有内置的遍历器,并没有实现这个接口,使得它无法被for…of遍历。
Array.prototype[Symbol.iterator];
// ƒ values() { [native code] }
String.prototype[Symbol.iterator];
// ƒ [Symbol.iterator]() { [native code] }
Set.prototype[Symbol.iterator];
// ƒ values() { [native code] }
Map.prototype[Symbol.iterator];
// ƒ entries() { [native code] }
Object.prototype[Symbol.iterator];
// undefined