摘要:另外還有一點(diǎn)需要注意的,在由宿主實(shí)現(xiàn)的對(duì)象中,規(guī)范規(guī)定了不能返回和這幾種類型,但是例外,返回的是,這是不遵循規(guī)范的實(shí)現(xiàn)。
這世界上之所以會(huì)有無主的東西,方法是因?yàn)橛腥耸チ擞洃洝?p>——王小波《萬壽寺》
本文為讀 lodash 源碼的第二十篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-lodash
gitbook也會(huì)同步倉(cāng)庫(kù)的更新,gitbook地址:pocket-lodash
源碼分析isObjectLike 的源碼很短,如下:
function isObjectLike(value) { return typeof value == "object" && value !== null }
其實(shí)就是使用 typeof 操作符,如果返回值為 object ,并且值又不為 null 時(shí),就認(rèn)為是類對(duì)象。
這里需要簡(jiǎn)單地說一下 typeof 操作符,typeof 會(huì)遵循下面的規(guī)則來返回:
類型 | 結(jié)果 |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol | "symbol" |
宿主對(duì)象 | 由宿主實(shí)現(xiàn),但是不能為 "undefined", "boolean", "number" 和 "string" |
函數(shù)對(duì)象 | "function" |
任意其它對(duì)象 | "object" |
這里需要說一下的是 null ,也是 isObjectLike 的關(guān)鍵所在,使用 typeof 的操作符時(shí),null 會(huì)返回 object ,為什么會(huì)這樣呢,看 MDN 上的解釋:
在 JavaScript 最初的實(shí)現(xiàn)中,JavaScript 中的值是由一個(gè)表示類型的標(biāo)簽和實(shí)際數(shù)據(jù)值表示的。對(duì)象的類型標(biāo)簽是 0。由于 null 代表的是空指針(大多數(shù)平臺(tái)下值為 0x00),因此,null的類型標(biāo)簽也成為了 0,typeof null就錯(cuò)誤的返回了"object"。(reference)ECMAScript提出了一個(gè)修復(fù)(通過opt-in),但被拒絕。這將導(dǎo)致typeof null === "object"。
另外還有一點(diǎn)需要注意的,在由宿主實(shí)現(xiàn)的對(duì)象中,規(guī)范規(guī)定了不能返回 "undefined", "boolean", "number" 和 "string" 這幾種類型,但是 document.all 例外,返回的是 "undefined" ,這是不遵循規(guī)范的實(shí)現(xiàn)。
參考MDN:typeof
License署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際 (CC BY-NC-ND 4.0)
最后,所有文章都會(huì)同步發(fā)送到微信公眾號(hào)上,歡迎關(guān)注,歡迎提意見:
作者:對(duì)角另一面
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/98120.html
摘要:卡爾維諾煙云本文為讀源碼的第二十一篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎也會(huì)同步倉(cāng)庫(kù)的更新,地址依賴源碼分析之?dāng)?shù)據(jù)類型獲取的兼容性源碼分析之源碼分析用來判斷某個(gè)值是否為類對(duì)象。如果某個(gè)值為類對(duì)象使用判斷,并且調(diào)用返回的值為時(shí),則為類對(duì)象。 有人命中注定要過平庸的生活,默默無聞,因?yàn)樗麄兘?jīng)歷了痛苦或不幸;有人卻故意這樣做,那是因?yàn)樗麄兊玫降男腋3^了他們的承受能力?!柧S諾《煙云》 ...
摘要:寫了幾篇筆記以后發(fā)現(xiàn)很多函數(shù)大量依賴了內(nèi)部的基礎(chǔ)函數(shù),一次性讀完有點(diǎn)麻煩,所以還是決定從基礎(chǔ)函數(shù)沒有或者很少依賴其他函數(shù)看起。 百忙之中(閑來無事)想抽點(diǎn)時(shí)間好好讀一下源碼,于是就選了Lodash來寫一個(gè)系列罷。寫了幾篇筆記以后發(fā)現(xiàn)很多函數(shù)大量依賴了內(nèi)部的基礎(chǔ)函數(shù),一次性讀完有點(diǎn)麻煩,所以還是決定從基礎(chǔ)函數(shù)(沒有或者很少依賴其他函數(shù))看起。 文檔地址:中文文檔?? 英文文檔源碼地址:g...
摘要:與之前的類似,利用構(gòu)造函數(shù)創(chuàng)建的字符串是一個(gè)所以檢測(cè)字符串,除了基本字符串以外還要注意字符串對(duì)象。也就是說該對(duì)象由構(gòu)造函數(shù)創(chuàng)建,或者為。 原文:https://fatge.github.io/2019/...歡迎Star:https://github.com/FatGe/FatG... showImg(https://fatge.xyz/static/img/js-types.png...
摘要:在幾天前發(fā)布了新版本,被合入。但是在版本迭代的背后很多有趣的設(shè)計(jì)值得了解。參數(shù)處理這項(xiàng)改動(dòng)由提出。對(duì)透明化處理中的,達(dá)到將包裹起來的目的。對(duì)的凍結(jié)認(rèn)為,在中使用和方法是一種反模式。尤其是這樣的新,某些開發(fā)者認(rèn)為將逐漸取代。 showImg(https://segmentfault.com/img/remote/1460000014571148); Redux 在幾天前(2018.04....
閱讀 1387·2021-09-02 13:36
閱讀 2792·2019-08-30 15:44
閱讀 3058·2019-08-29 15:04
閱讀 3287·2019-08-26 13:40
閱讀 3818·2019-08-26 13:37
閱讀 1256·2019-08-26 12:22
閱讀 1193·2019-08-26 11:36
閱讀 1280·2019-08-26 10:41