【若川视野 x 源码共读】 第33期 | arrify 转数组

132 阅读1分钟

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

这是源码共读的第33期,链接:第33期 | arrify 转数组

学习准备

学习目标

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循环