千萬不要再用錯了這個 Lodash 方法了!可能釀成大禍!
前言
大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心!
前幾天接手了一個項目,發(fā)現(xiàn)有一個 Lodash 的方法在項目里用的非常多!那就是 isObject 這個方法!
我一看到這個方法我就害怕,馬上去找了之前開發(fā)這個項目的前端,以下是跟他的對話:
- 我:大佬,你知道 Lodash 的 isObject 是干啥用的嗎?
- 他說:就是判斷一個值是否是一個對象類型。
- 我:那數(shù)組、函數(shù) 這些算不算對象呢?
- 他說:應該。。應該不算吧?
- 我:。。。。。。。
我去翻了翻組內(nèi)其他項目的代碼,發(fā)現(xiàn)只要是判斷普通對象的類型的,都用的是 isObject ?。。。。。?/p>
萬物皆對象
我們在學習 JavaScript 基礎的時候會聽到這么一句話萬物皆對象,其實這不是沒有道理的,看過原型鏈圖的會比較理解這句話。
圖片
說回 isObject
說回來 isObject,我為什么看到這個方法我就心慌呢?因為以前踩過坑,很多人一直認為isObject是用來判斷對象類型的,其實他們認為的也沒錯,但是他們可能沒好好看 Lodash 的文檔。
圖片
文檔寫著:檢查 value 是否為 Object 的language type。(例如: arrays, functions, objects, regexes,new Number(0), 以及 new String(''))。
圖片
現(xiàn)在知道問題出在哪了吧?大部分人都認為:判斷普通對象可以使用 isObject 來判斷。
但其實這么認為是不對的,因為isObject檢測后返回 true 的類型,可不止普通對象哦!
isPlanObject
如果你想要判斷一個值是否為普通對象,可以使用 isPlanObject。
圖片
這樣才能達到我們想要的目的。