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方法。
let someArray = [1, "string", false];for (let entry of someArray) {console.log(entry); // 1, "string", false}
1.3. for..of vs for..in语句
3.1 for..of和for..in都可以迭代一个列表,但是迭代的值却不同。
3.2 for..in迭代的是对象的 键 的列表;for..of迭代对象的键对应的值。
2.1 代码生成
- 目标为es5和es3
1.1 生成目标为es5或es3,迭代器只允许在Array类型上使用。
1.2 在非数组值上使用for…of语句会得到一个错误,就算已经实现了Symbol.iterator方法
- 目标为es5或更高
当目标为兼容ECMAScipt 2015的引擎时,编译器会生成相应引擎的for..of内置迭代器实现方式。
