用迭代器 模拟一个for of

javascript 复制代码
 function forOf(arr, cb) {
    //const fun = arr.entries
     const fun = arr[Symbol.iterator]
    if (arr != null && typeof fun !== 'function') {
       throw TypeError("arr is not a iterable")
    }
    let iterator = arr[Symbol.iterator]();
    let obj = iterator.next();
    while (!obj.done) {
      cb(obj.value)
      obj = iterator.next()
    }
  }
javascript 复制代码
 // 测试
  const obj = { k: 1 }
  const obj2 = { k: 2 }
  const wp = new WeakMap([[obj, 1], [obj2, 2]]) //x
  const ws = new WeakSet([[obj, 1], [obj2, 2]])//x
  const map = new Map([[obj, 1], [obj2, 2]])//√
  const set = new Set([[obj, 1], [obj2, 2]])//√
  const arr = Array.from(ws) //√ []

  let ddo = wp
  forOf(ddo, function (val) {
    console.log(val, 'my forOf')
  })
 // for (let i of ddo) {
 //   console.log(i, "for of")
 // }
相关推荐
ZoeLandia2 分钟前
从前端视角看设计模式之行为型模式篇
前端·设计模式
追Star仙18 分钟前
基于Qt中的QAxObject实现指定表格合并数据进行word表格的合并
开发语言·笔记·qt·word
securitor24 分钟前
【java】IP来源提取国家地址
java·前端·python
DaphneOdera171 小时前
Git Bash 配置 zsh
开发语言·git·bash
Code侠客行1 小时前
Scala语言的编程范式
开发语言·后端·golang
yqcoder1 小时前
NPM 包管理问题汇总
前端·npm·node.js
程序菜鸟营1 小时前
nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)
前端·npm·node.js
lozhyf1 小时前
Go语言-学习一
开发语言·学习·golang
bsr19831 小时前
前端路由的hash模式和history模式
前端·history·hash·路由模式
dujunqiu1 小时前
bash: ./xxx: No such file or directory
开发语言·bash