lodash源码系列——isObject和isObjectLike

写在前面

本人前端小白,今年六月份刚毕业,一直想花时间研究react的源码,但都发现无从下手,每次看不了多久就放弃了,最后什么也没看懂。无心中在知乎看到一篇文章,不建议直接看已经迭代了这么多大版本的框架源码,建议能够按部就班的看,从一些简单的工具库的源码入手,既不会打消看源码的积极性,也能够借机夯实本身的基础。恍然大悟,因而打算从lodash下手,萌发了写这个lodash专题系列的想法,一方面是自我激励,一方面也是能够发出来和你们一块儿学习一下,欢迎大佬们批评指正。前端

以前也没有接触过lodash,打算从官方文档入手,学习一个api的使用,就本身尝试实现一个api,再与源码进行比较,分析本身的不足。我看的是v4.17.15(最新)的源码,那么让咱们从_.isObject开始吧~react

第一次写掘金,你们多多包涵~api

_.isObject(value)

检查value是否为Object类型。bash

返回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')
}
复制代码

分析

源码精炼不少。值得学习和反复推敲。工具

实现的过程当中涉及的相关知识点有:学习

  1. js的数据类型有哪些?ui

    boolean、undefined、string、number、null、symbol和objectspa

  2. typeof返回值为object的数据类型有哪些?code

    null、array、regexp、date

    typeof null === 'object',可是null为基本数据类型

  3. function也是对象的一种,可是typeof的结果是'function'

  4. 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涉及的知识点差很少,因此基本实现了。

相关文章
相关标签/搜索