1. // 迭代器 是对数据结构读取的方式,有序的,连续的,基于拉取的一种消耗数据的组织方式。
    2. let arr = [1, 2, 3];
    3. console.log(arr);
    4. let iter = arr[Symbol.iterator]();
    5. console.log(iter.next()); //{value: 1,done: false}
    6. console.log(iter.next()); //{value: 2,done: false}
    7. console.log(iter.next()); //{value: 3,done: false}
    8. console.log(iter.next()); //{value: undefined,done: true}
    9. console.log(iter.next()); //{value: undefined,done: true}
    10. // 迭代就是对数据统一的数据抽取。
    11. // Array, Map, Set, WeakMap,arguments nodelist(节点对象) TypeArray
    12. // 类数组 arguments nodelist(节点对象) Map Set WeakMap WeakSet(节点对象)
    13. // TypeArray:类型数组 底层二进制数据的缓存区;
    14. // 迭代器实现方式 Symbol.iterator
    15. // 返回一个对象 有next方法 调用next方法返回一个对象{value: '',done: false}
    16. function makeIterator(arr) {
    17. var nextIndex = 0,
    18. len = arr.length;
    19. return {
    20. next: function () {
    21. return (nextIndex < len ? {
    22. value: arr[nextIndex++],
    23. done: false
    24. } : {
    25. value: undefined,
    26. done: true
    27. })
    28. }
    29. }
    30. }
    31. // TypeArray:类型数组 在JavaScript中是没有这个构造函数的。
    32. const tArray = new Int8Array(8);
    33. console.log(tArray);
    34. tArray[0] = 100;
    35. // C++ JAVA C# Python for...Of 迭代
    36. let arr = [1, 2, 3, 4];
    37. for (let i of arr) {
    38. console.log(i); // 1, 2, 3, 4;
    39. }
    40. let obj = {
    41. start: [1, 2, 3, 4],
    42. end: [5, 6, 7],
    43. [Symbol.iterator]() {
    44. let idx = 0,
    45. arr = [ ...this.start, ...this.end],
    46. len = arr.length;
    47. return {
    48. next() {
    49. return (idx < len ? {
    50. value: arr[idx++],
    51. done: false
    52. } :
    53. {
    54. value: undefined,
    55. done: true
    56. })
    57. }
    58. }
    59. }
    60. };
    61. for (let i of obj) {
    62. console.log(i); // obj is not iteratorable
    63. }