lodash源码分析之isObjectLike

这世界上之因此会有无主的东西,方法是由于有人失去了记忆。

——王小波《万寿寺》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' ,这是不遵循规范的实现。函数

参考

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)源码分析

最后,全部文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

做者:对角另外一面

相关文章
相关标签/搜索