这世界上之因此会有无主的东西,方法是由于有人失去了记忆。——王小波《万寿寺》javascript
本文为读 lodash 源码的第二十篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodashphp
gitbook也会同步仓库的更新,gitbook地址:pocket-lodashhtml
isObjectLike
的源码很短,以下:java
function isObjectLike(value) { return typeof value == 'object' && value !== null }
其实就是使用 typeof
操做符,若是返回值为 object
,而且值又不为 null
时,就认为是类对象。git
这里须要简单地说一下 typeof
操做符,typeof
会遵循下面的规则来返回:github
类型 | 结果 |
---|---|
Undefined | 'undefined' |
Null | 'object' |
Boolean | 'boolean' |
Number | 'number' |
String | 'string' |
Symbol | 'symbol' |
宿主对象 | 由宿主实现,可是不能为 'undefined' , 'boolean' , 'number' 和 'string' |
函数对象 | 'function' |
任意其它对象 | 'object' |
这里须要说一下的是 null
,也是 isObjectLike
的关键所在,使用 typeof
的操做符时,null
会返回 object
,为何会这样呢,看 MDN
上的解释:微信
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。因为null
表明的是空指针(大多数平台下值为 0x00),所以,null的类型标签也成为了 0,typeof null
就错误的返回了"object"
。( reference)ECMAScript提出了一个修复(经过opt-in),但被拒绝。这将致使typeof null === 'object'。ecmascript
另外还有一点须要注意的,在由宿主实现的对象中,规范规定了不能返回 'undefined'
, 'boolean'
, 'number'
和 'string'
这几种类型,可是 document.all
例外,返回的是 'undefined'
,这是不遵循规范的实现。函数
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)源码分析
最后,全部文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
做者:对角另外一面