【第33期】arrify 转数组

77 阅读1分钟

本次源码阅读的内容是 arrify , 源码非常简短:

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. 将 null 和 undefined 转换成 []
  2. 如果是数组,原封不动的返回
  3. 如果是 String 类型数据,则放入数组
  4. 如果 value 是可迭代对象 (e.g. Set, Map),则将其转换成数组
  5. 除了以上类型的数据,都将其用数组包裹后直接返回

第一遍读源码的时候发现, String类型数据的返回值和其他类型的返回值是一样的,那为什么还单独抽出一个判断逻辑呢?当查看 Symbol.iterator 的内容时发现,String 具有默认的迭代器行为,因此需要单独拿出来进行处理。

收获

  1. 复习了 Symbol iterator 的知识
  2. 了解了 xo tsd ava
  3. 了解了 package.json 的具体内容