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

131 阅读1分钟

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

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里StringArrayMapSet对象内置 [Symbol.iterator],但是每个的具体实现不同

  • Map的实现是entries
  • Set、Array的实现是values
  • string的打印只能看到 ƒ [Symbol.iterator] ()

所以作者把typeof value === 'string' 的判断写在 typeof value[Symbol.iterator] === 'function' 前面是有原因的~~

内置的[Symbol.iterator],可以在chrome的console里打印查看