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涉及的知識點差很少,因此基本實現了。

相關文章
相關標籤/搜索