美文网首页
[] == false,!![] == true ,why?

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

作者: Yuxin_Liu | 来源:发表于2017-02-27 11:26 被阅读0次

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

    ==的隐式类型转化

    按照标准来逐条来看,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,完美👏!

    相关文章

      网友评论

          本文标题:[] == false,!![] == true ,why?

          本文链接:https://www.haomeiwen.com/subject/ujzawttx.html