本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与
arrify这个库虽然很小,但是能学到的东西还是挺多的(.gitattributtes、xo、tsd)
配置文件&pageck.json命令
.gitattributes 文件作用
感觉该文件最有用的配置是eol=lf ,用来统一windows与macos换行符
xo
一个封装好常用eslint规则的检测工具,特点:提示友好,安装即用,可扩展
ava
感觉这是个好东西,单元测试库,提示更详细,支持观察模式,异步测试,但是好像不支持mock
tsd
给ts类型做单元测试的工具
arrify源码
这个源码里最迷惑的是Symbol.iterator这一段
if (typeof value[Symbol.iterator] === 'function') {
return [...value];
}
在MDN的迭代协议里可以找打答案
| [Symbol.iterator] | 一个无参数的函数,其返回值为一个符合迭代器协议的对象。 |
|---|
js里String、Array、Map、Set对象内置 [Symbol.iterator],但是每个的具体实现不同
- Map的实现是entries
- Set、Array的实现是values
- string的打印只能看到 ƒ [Symbol.iterator] ()
所以作者把typeof value === 'string' 的判断写在 typeof value[Symbol.iterator] === 'function' 前面是有原因的~~
内置的[Symbol.iterator],可以在chrome的console里打印查看