- 本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
- 这是源码共读的第33期,链接:link.juejin.cn/?target=htt…
核心源码鉴赏
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];
}
注释版
以下是我根据自己的理解添加的注释内容
/**
* @description 将任何数据类型的数据转为数组
* @export
* @param {*} value 入参待转化的内容
* @returns {*} 返回转化过后的内容
*/
export default function arrify(value) {
// 若入参为null或undefined,返回空数组;
if (value === null || value === undefined) {
return [];
}
// 若入参为数组,返回本身;
if (Array.isArray(value)) {
return value;
}
// 若入参为字符串,返回数组包裹字符串;
if (typeof value === 'string') {
return [value];
}
// 若入参为其他可迭代对象,如set、map则利用扩展运算符转为数组;
if (typeof value[Symbol.iterator] === 'function') {
return [...value];
}
// 其余类型均返回数组包裹后的数组
return [value];
}
收获与总结
本次源码比较简单,主要学习了它的边缘情况处理和测试框架ava的使用,遇到的小坑是项目下载下来后要切换node版本到14以上,package.json里面写的>=12属实迷惑到我了😅。
文章到此结束,感谢阅读~~