本文参加了由 公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。
这是源码共读的【第33期】—— 链接
自己也是刚刚开始读源码,希望自己可以坚持下去!!!
介绍
这是一个工具函数,可以将任意值转换为数组
用法
具体用法npm上解释的很清楚了,这里不做赘述,重点是第三部分的源码
源码
这个工具函数的源码比较简单,就十几行代码,具体如下:
export default function arrify(value) {
if (value === null || value === undefined) {
return [];
}
if (Array.isArray(value)) {
return value;
}
if (typeof value === 'string') {
return [value];
}
if (typeof value[Symbol.iterator] === 'function') {
return [...value];
}
return [value];
}
1、Array.isArray(value)
用于确定传递的值是否是一个 Array
Array.isArray([1, 2, 3]); // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar'); // false
Array.isArray(undefined); // false
2、Symbol.iterator
(1)Iterator(遍历器)的概念
它是一种接口,为各种不同的数据结构提供统一的访问机制。
任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)
Iterator 的作用有三个:
一是为各种数据结构,提供一个统一的、简便的访问接口;
二是使得数据结构的成员能够按某种次序排列;
三是 ES6 创造了一种新的遍历命令`for...of`循环,Iterator 接口主要供`for...of`消费;
(2)默认 Iterator 接口
ES6 规定,默认的 Iterator 接口部署在数据结构的`Symbol.iterator`属性,或者说,
一个数据结构只要具有`Symbol.iterator`属性,就可以认为是“可遍历的”(iterable)
const obj = {
[Symbol.iterator] : function () {
return {
next: function () {
return {
value: 1,
done: true
};
}
};
}
};
由此可以知道,typeof value[Symbol.iterator] === 'function'
, 如果 value 为可迭代对象,则返回由展开运算符转化的数组。
其他知识
源码主要就以上十几行,内容不多,但是第一次阅读源码,除了以上的内容之外,还收获了很多其他的知识;。
代码调试
ava 简单便捷的测试运行器
xo 强制执行严格代码风格
总结一下:
学到了什么?
1. iterator 迭代器的相关知识;
2. Array.isArray() 用来判断元素是否为数组;
3. 学到了js代码调试;
4. 了解到了编写测试代码的方法;
遗憾/待改进的?
1. iterator 迭代器感觉了解了,但是实际上还是有点不太会用,感觉理解的不够透彻 & 实际项目中可能会想不起来使用。
2. 了解了测试代码,但是感觉自己还是不会在自己的项目中使用单元测试 / 编写测试代码,后续还要加强这个学习;
3. js的代码调试使用的不够熟练,需要继续熟练一下!
4. 如何在自己的项目中便捷的使用debug调试呢?
- 后续如果学到了/理解了上述问题,再写文章来补充!!!