本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
学习到的知识点
- 最大的感受就是:作者真是造轮子的天才
- 学习 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));
测试结果: