娃娃偶尔神游的时候喜欢在控制台里敲一些稀奇古怪的东西,标题的那一坨就是其中一个🙂。
==的隐式类型转化
按照标准来逐条来看,x == y会经历些什么:
- type(x) type(y)相同。好的,返回
x === y
的结果 - x是null,y是undefined || x是undefined,y是null 。返回true。
- x,y其中一个是Number、另一个是String,那就把是String的那个用Number()处理掉。
Number(x) == y
- x,y不管哪个是Boolean、都先用Number()处理掉。
Number(true)//1, Number(false)//0
- 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,完美👏!
网友评论