写在前面
本人前端小白,今年六月份刚毕业,一直想花时间研究react的源码,但都发现无从下手,每次看不了多久就放弃了,最后什么也没看懂。无意中在知乎看到一篇文章,不建议直接看已经迭代了这么多大版本的框架源码,建议可以循序渐进的看,从一些简单的工具库的源码入手,既不会打消看源码的积极性,也可以借机夯实自己的基础。恍然大悟,于是打算从lodash下手,萌发了写这个lodash专题系列的想法,一方面是自我激励,一方面也是可以发出来和大家一起学习一下,欢迎大佬们批评指正。
之前也没有接触过lodash,打算从官方文档入手,学习一个api的使用,就自己尝试实现一个api,再与源码进行比较,分析自己的不足。我看的是v4.17.15(最新)的源码,那么让我们从_.isObject开始吧~
第一次写掘金,大家多多包涵~
_.isObject(value)
检查value是否为Object类型。
返回true or false。
自己实现
function isObject(value) {
const type = typeof value
if(type === 'function') {
return true
}
if (type === 'object' && value != null) {
return true
}
return false
}
源码
function isObject(value) {
var type = typeof value
return value != null && (type == 'object' || type == 'function')
}
分析
源码精炼很多。值得学习和反复推敲。
实现的过程中涉及的相关知识点有:
-
js的数据类型有哪些?
boolean、undefined、string、number、null、symbol和object
-
typeof返回值为object的数据类型有哪些?
null、array、regexp、date
typeof null === 'object',但是null为基本数据类型
-
function也是对象的一种,但是typeof的结果是'function'
-
null、undefined的相等和严格相等?
undefined == undefined // true
undefiend === undefined // true
undefined == null // true
null == null // true
null === null // false
_.isObjectLike(value)
检查value是否是类对象。如果一个值是类对象,那么它不应该是null,而且typeof后的结果是"object"。
返回值:true/false。
自己实现
function isObjectLike(value) {
return value != null && typeof value === 'object'
}
源码
function isObjectLike(value) {
return value != null && typeof value == 'object'
}
分析
与isObject涉及的知识点差不多,所以基本实现了。