[] == false,!![] == true ,why?

娃娃偶尔神游的时候喜欢在控制台里敲一些稀奇古怪的东西,标题的那一坨就是其中一个🙂。

==的隐式类型转化

按照标准来逐条来看,x == y会经历些什么:

  1. type(x) type(y)相同。好的,返回x === y的结果
  2. x是null,y是undefined || x是undefined,y是null 。返回true。
  3. x,y其中一个是Number、另一个是String,那就把是String的那个用Number()处理掉。Number(x) == y
  4. x,y不管哪个是Boolean、都先用Number()处理掉。
    Number(true)//1, Number(false)//0
  5. x,y其中一个是Object,比如x是,那就调用x的toPromitive()处理
    toPromitive()一直比较恍惚。肿的呢?如果是Date类型的,先调toString(),不然的话都先调valueOf(),然后再toString()

所以[] == false是怎么个过程
Number(false)为0;
[]经历valueOf(),还是[],[]再经历toString===>""就是个空字符串了,把这个""用Number()处理,就是0。
so,返回true。
!![] == true是怎么个过程
!![]这个东西,实际上是!!Boolean([]),Boolean([])是true!Boolean([])是true!Boolean([])是true!(为什么是true,你去看评论啊!!)两个!!运算刚好还是true。左边、右边都是true,完美👏!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,943评论 19 139
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 3,382评论 0 0
  • Javascript 中有6种基本类型(包括 symbol),以及对象类型,他们在不同的运算中会被系统转化为不同是...
    faremax阅读 4,314评论 0 3
  • 几何时,那残阳已过唏嘘,破风而迟暮,为晚秋而羞涩在云层后,大道而简,无非心清目明,弃笔从戎论盐焗,几家言欢,烤蛋破...
    拙笔鹏哥阅读 2,920评论 0 1
  • ConstraintLayout 又名约束布局,出世于谷歌的大怀抱中,公布在2016年谷歌大会,现如今已经不是那个...
    非常好听的昵称阅读 3,558评论 1 4

友情链接更多精彩内容