1.1 可迭代性
    1.1.1 当一个对象实现了Symbol.iterator属性时,我们认为它是可迭代的。
    1.1.2 一些内置的类型如 Array,Map,Set,String,Int32Array,Uint32Array等都已经实现了各自的Symbol.iterator。
    1.1.3 对象上的 Symbol.iterator函数负责返回供迭代的值

    1.2. for..of会遍历可迭代的对象,调用对象上的Symbol.iterator方法。

    1. let someArray = [1, "string", false];
    2. for (let entry of someArray) {
    3. console.log(entry); // 1, "string", false
    4. }

    1.3. for..of vs for..in语句
    3.1 for..of和for..in都可以迭代一个列表,但是迭代的值却不同。
    3.2 for..in迭代的是对象的 键 的列表;for..of迭代对象的键对应的值。

    2.1 代码生成

    1. 目标为es5和es3

    1.1 生成目标为es5或es3,迭代器只允许在Array类型上使用。
    1.2 在非数组值上使用for…of语句会得到一个错误,就算已经实现了Symbol.iterator方法

    1. 目标为es5或更高

    当目标为兼容ECMAScipt 2015的引擎时,编译器会生成相应引擎的for..of内置迭代器实现方式。