资讯专栏INFORMATION COLUMN

lodash源码分析之isObjectLike

Bmob / 1293人阅读

摘要:另外还有一点需要注意的,在由宿主实现的对象中,规范规定了不能返回和这几种类型,但是例外,返回的是,这是不遵循规范的实现。

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

——王小波《万寿寺》

本文为读 lodash 源码的第二十篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

源码分析

isObjectLike 的源码很短,如下:

function isObjectLike(value) {
  return typeof value == "object" && value !== null
}

其实就是使用 typeof 操作符,如果返回值为 object ,并且值又不为 null 时,就认为是类对象。

这里需要简单地说一下 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 上的解释:

在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null的类型标签也成为了 0,typeof null就错误的返回了"object"。(reference)

ECMAScript提出了一个修复(通过opt-in),但被拒绝。这将导致typeof null === "object"。

另外还有一点需要注意的,在由宿主实现的对象中,规范规定了不能返回 "undefined", "boolean", "number""string" 这几种类型,但是 document.all 例外,返回的是 "undefined" ,这是不遵循规范的实现。

参考

MDN:typeof

License

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

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

作者:对角另一面

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98120.html

相关文章

  • lodash源码分析isArguments

    摘要:卡尔维诺烟云本文为读源码的第二十一篇,后续文章会更新到这个仓库中,欢迎也会同步仓库的更新,地址依赖源码分析之数据类型获取的兼容性源码分析之源码分析用来判断某个值是否为类对象。如果某个值为类对象使用判断,并且调用返回的值为时,则为类对象。 有人命中注定要过平庸的生活,默默无闻,因为他们经历了痛苦或不幸;有人却故意这样做,那是因为他们得到的幸福超过了他们的承受能力。——卡尔维诺《烟云》 ...

    _Dreams 评论0 收藏0
  • Lodash学习笔记 - 一些基础函数(1)

    摘要:写了几篇笔记以后发现很多函数大量依赖了内部的基础函数,一次性读完有点麻烦,所以还是决定从基础函数没有或者很少依赖其他函数看起。 百忙之中(闲来无事)想抽点时间好好读一下源码,于是就选了Lodash来写一个系列罢。写了几篇笔记以后发现很多函数大量依赖了内部的基础函数,一次性读完有点麻烦,所以还是决定从基础函数(没有或者很少依赖其他函数)看起。 文档地址:中文文档   英文文档源码地址:g...

    evin2016 评论0 收藏0
  • Lodash 是如何做类型检测的

    摘要:与之前的类似,利用构造函数创建的字符串是一个所以检测字符串,除了基本字符串以外还要注意字符串对象。也就是说该对象由构造函数创建,或者为。 原文:https://fatge.github.io/2019/...欢迎Star:https://github.com/FatGe/FatG... showImg(https://fatge.xyz/static/img/js-types.png...

    keke 评论0 收藏0
  • 探索 Redux4.0 版本迭代 论基础谈展望(对比 React context)

    摘要:在几天前发布了新版本,被合入。但是在版本迭代的背后很多有趣的设计值得了解。参数处理这项改动由提出。对透明化处理中的,达到将包裹起来的目的。对的冻结认为,在中使用和方法是一种反模式。尤其是这样的新,某些开发者认为将逐渐取代。 showImg(https://segmentfault.com/img/remote/1460000014571148); Redux 在几天前(2018.04....

    xialong 评论0 收藏0

发表评论

0条评论

Bmob

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<