第33期 | arrify 转数组

39 阅读1分钟

本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。

学习到的知识点

  • 最大的感受就是:作者真是造轮子的天才
  • 学习 Symbol.iterator 的使用场景
    • ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。
    • Symbol.iterator属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器对象。该对象的根本特征就是具有next方法。每次调用next方法,都会返回一个代表当前成员的信息对象,具有value和done两个属性。。
    • 调用 Iterator 接口的场合:
      • 解构赋值
      • 扩展运算符
      • yield*
      • 其他场合
  • 学会通过测试用例调试源码
    • 以测试用例代码为调试代码进行调试
    • Auto Attach智能模式启动node调试
    • 添加行内断点
    • 跳入./index.js源码学习代码逻辑
  • 各类文件配置

疑问

如果Symbol.iterator方法对应的不是遍历器生成函数(即会返回一个遍历器对象),解释引擎将会报错。

测试数据:

import arrify from "arrify";
let iterable = {
  0: "a",
  1: "b",
  2: "c",
  length: 3,
  [Symbol.iterator]: () => 1,
};
console.log(arrify(iterable));

测试结果:

参考文章

  1. 深入浅出package.json
  2. ES6标准入门 Iterator 和 for...of 循环
  3. mdn Symbol.iterator
  4. mdn 迭代器和生成器
  5. mdn Map
  6. mdn Set