// 迭代器 是对数据结构读取的方式,有序的,连续的,基于拉取的一种消耗数据的组织方式。let arr = [1, 2, 3];console.log(arr);let iter = arr[Symbol.iterator]();console.log(iter.next()); //{value: 1,done: false}console.log(iter.next()); //{value: 2,done: false}console.log(iter.next()); //{value: 3,done: false}console.log(iter.next()); //{value: undefined,done: true}console.log(iter.next()); //{value: undefined,done: true}// 迭代就是对数据统一的数据抽取。// Array, Map, Set, WeakMap,arguments nodelist(节点对象) TypeArray// 类数组 arguments nodelist(节点对象) Map Set WeakMap WeakSet(节点对象)// TypeArray:类型数组 底层二进制数据的缓存区;// 迭代器实现方式 Symbol.iterator// 返回一个对象 有next方法 调用next方法返回一个对象{value: '',done: false}function makeIterator(arr) { var nextIndex = 0, len = arr.length; return { next: function () { return (nextIndex < len ? { value: arr[nextIndex++], done: false } : { value: undefined, done: true }) } }}// TypeArray:类型数组 在JavaScript中是没有这个构造函数的。const tArray = new Int8Array(8);console.log(tArray);tArray[0] = 100;// C++ JAVA C# Python for...Of 迭代let arr = [1, 2, 3, 4];for (let i of arr) { console.log(i); // 1, 2, 3, 4;}let obj = { start: [1, 2, 3, 4], end: [5, 6, 7], [Symbol.iterator]() { let idx = 0, arr = [ ...this.start, ...this.end], len = arr.length; return { next() { return (idx < len ? { value: arr[idx++], done: false } : { value: undefined, done: true }) } } }};for (let i of obj) { console.log(i); // obj is not iteratorable}