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