lodash源碼分析之isObjectLike

這世界上之因此會有無主的東西,方法是由於有人失去了記憶。javascript

——王小波《萬壽寺》php

本文爲讀 lodash 源碼的第二十篇,後續文章會更新到這個倉庫中,歡迎 star:pocket-lodashhtml

gitbook也會同步倉庫的更新,gitbook地址:pocket-lodashjava

源碼分析

isObjectLike 的源碼很短,以下:git

function isObjectLike(value) {
  return typeof value == 'object' && value !== null
}
複製代碼

其實就是使用 typeof 操做符,若是返回值爲 object ,而且值又不爲 null 時,就認爲是類對象。github

這裏須要簡單地說一下 typeof 操做符,typeof 會遵循下面的規則來返回:微信

類型 結果
Undefined 'undefined'
Null 'object'
Boolean 'boolean'
Number 'number'
String 'string'
Symbol 'symbol'
宿主對象 由宿主實現,可是不能爲 'undefined', 'boolean', 'number''string'
函數對象 'function'
任意其它對象 'object'

這裏須要說一下的是 null ,也是 isObjectLike 的關鍵所在,使用 typeof 的操做符時,null 會返回 object ,爲何會這樣呢,看 MDN 上的解釋:ecmascript

在 JavaScript 最初的實現中,JavaScript 中的值是由一個表示類型的標籤和實際數據值表示的。對象的類型標籤是 0。因爲 null 表明的是空指針(大多數平臺下值爲 0x00),所以,null的類型標籤也成爲了 0,typeof null就錯誤的返回了"object"。(reference函數

ECMAScript提出了一個修復(經過opt-in),但被拒絕。這將致使typeof null === 'object'。源碼分析

另外還有一點須要注意的,在由宿主實現的對象中,規範規定了不能返回 'undefined', 'boolean', 'number''string' 這幾種類型,可是 document.all 例外,返回的是 'undefined' ,這是不遵循規範的實現。

參考

License

署名-非商業性使用-禁止演繹 4.0 國際 (CC BY-NC-ND 4.0)

最後,全部文章都會同步發送到微信公衆號上,歡迎關注,歡迎提意見:

做者:對角另外一面

相關文章
相關標籤/搜索