• iterator 迭代器


    目录

    iterator迭代器的用法

    迭代器的语法糖

    给对象部署迭代器


    • 在ES6中 我们学过了 ...拓展运算符 拓展运算符能拓展的 是带有iterator迭代器的数据

    iterator迭代器的用法

      1. //1.创建迭代器对象
      2. //具备迭代器的数据 都会有一个方法 Symbol.iterator
      3. //这个方法的返回值是 迭代器对象
      4. //因此 我们这里 就获取返回值 得到迭代器对象
      5. let 迭代器对象变量名 = 具备迭代器的数据[Symbol.iterator]()
      6. //2.迭代器对象 具备一个方法 next 可以一步一步的循环指定的数据
      7. //next方法 会将迭代器对象 循环出来的值 返回出来
      8. console.log(迭代器对象变量名.next())
      9. //{value:本次循环的结果,done:数据循环是否结束 结束为true 没结束为false}

      迭代器的语法糖

      1. for of
      2. for(let 值变量 of 要循环的数据(带有迭代器)){
      3. //循环体代码
      4. //值变量 就表示 每一次 迭代器循环出来的结果
      5. }

      给对象部署迭代器

      1. //什么是迭代器呢 其实迭代器 就是一个方法 Symbol.iterator 数据调用这个方法 就可以生成迭代器对象从而实现 循环效果
      2. //对象本身 没有这个方法 我们如果想给对象部署迭代器 其实就是给对象添加这个方法
      3. //为了让所有对象 都能用到迭代器方法 我们将迭代器方法Symbol.iterator 添加到原型链的终点 Object.prototype
      4. Object.prototype[Symbol.iterator] = function(){
      5. //this--->被循环的对象
      6. let that = this;
      7. //获取到被循环的对象中 所有的属性值
      8. let valArr = Object.values(this);//valArr就是被循环的对象中的所有属性值组成的数组
      9. //声明一个变量 记录当前索要循环的索引
      10. let idx = -1
      11. //这个方法 应该返回一个迭代器对象
      12. let iterator = {
      13. //迭代器对象中具备一个方法 next 用来循环指定数据
      14. next(){
      15. idx++;
      16. //next方法返回了一个对象——{value:本次循环的属性值,done:false/true}
      17. if(idxlength){
      18. return {
      19. value:valArr[idx],
      20. done:false
      21. }
      22. }else{
      23. return {
      24. value:valArr[idx],
      25. done:true
      26. }
      27. }
      28. }
      29. }
      30. return iterator;
      31. }
      32. let obj = {
      33. name:"张三",
      34. age:18
      35. }
      36. let it = obj[Symbol.iterator]();
      37. console.log(it.next());
      38. console.log(it.next());
      39. console.log(it.next());
      40. for(let val of obj){
      41. console.log(val)
      42. }
      43. console.log(...obj)
      44. let obj1 = {
      45. name:"李四",
      46. age:19,
      47. gender:"男"
      48. }
      49. console.log(...obj1)

  • 相关阅读:
    【重识云原生】第六章容器6.1.7.1节——Docker核心技术cgroups综述
    炙手可热的ZNS SSD将会为数据中心带来什么?
    MongoDB-快速上手MongoDB命令行的一些简单操作
    vue3中如何掉用子組件的方法
    win10系统下使用openvino部署yolov5模型
    Qt 中多媒体模块的使用
    设计模式一: Observer(观察者模式)
    vscode 设置代理
    nvm管理多个版本的nodejs
    接口测试入门实践
  • 原文地址:https://blog.csdn.net/weixin_64037609/article/details/127044246