本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。
这是源码共读的第33期,链接:第33期 | arrify 转数组。
学习准备
- github仓库地址 arrify
- github1s: github1s.com/sindresorhu…
学习目标
1,学习Symbol.iterator的使用场景。
2,学会通过测试用例调试源码。
3,多通过测试用例调试,学习一下测试用例相关的基础知识。
源码
export default function arrify(value) {
// 如果value的值是null或者undefined,返回[]空数组
if (value === null || value === undefined) {
return [];
}
// 如果value是数组,直接返回本身
if (Array.isArray(value)) {
return value;
}
// 如果value是字符串类型,则将字符串存入数组中
if (typeof value === 'string') {
return [value];
}
// 如果对象是一个存在迭代器的类型,用扩展运算符接收可迭代对象
if (typeof value[Symbol.iterator] === 'function') {
return [...value];
}
return [value];
}
笔记
一:查看安装依赖
查看package.json,发现安装了三个依赖:
- xo:一个开箱即用的 Linter,内部是 ESLint
- tsd:为类型定义编写测试
- ava:Node.js 环境下的测试运行器
测试启动脚本
test: "xo && ava && tsd"
- 先让 xo 对 js 和 ts 文件做 Lint
- 再交给 ava 跑 test.js 测试 index.js
- 最后是 tsd 跑 index.test-d.ts 测试 index.d.ts
依托这三个依赖,Lint到测试全流程无需任何配置。
二:Symbol.iterator
Iterator和for...of循环