1、前言
- 本文参加了由 公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与
- 这是源码共读的第33期,链接: 第33期|arrify转数组
2、准备工作
- github仓库地址 arrify
- github1s: github1s.com/sindresorhu…
- 关于如何调试看这篇:新手向:前端程序员必学基本技能——调试JS代码
3、开始
3.1源码
export default function arrify(value) {
// 判断参数是否是null 或者 undefined 通过则返回空数组
if (value === null || value === undefined) {
return [];
}
// 判断参数是否是数组类型 通过则返回参数自身
if (Array.isArray(value)) {
return value;
}
// 判断参数是否为字符串类型,之所以这里要单独判断下 是因为字符串也可以使用 for...of api
if (typeof value === 'string') {
return [value];
}
// 判断参数是否能遍历 通过则返回用数组包装好的所有可遍历的属性
(value[Symbol.iterator] 判断参数是否含有iterator属性 该属性存在则可以认定参数为可"遍历"的)
if (typeof value[Symbol.iterator] === 'function') {
// 扩展运算符 将一个数组转为用逗号分隔的参数序列
return [...value];
}
return [value];
}
3.2 Iterator(遍历器)的概念
-
JavaScript 原有的表示“集合”的数据结构,主要是数组(
Array)和对象(Object),ES6 又添加了Map和Set。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。 -
遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
-
Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令
for...of循环,Iterator 接口主要供for...of消费。
4、结语
这个源码只有十几行,逻辑也并不复杂,但是看别人的源码了解他人的思路与逻辑也是一个很大的收获。
参考链接: