美文网首页
解密类型转换:if(xx)和 a==b的判断

解密类型转换:if(xx)和 a==b的判断

作者: 蔡华鹏 | 来源:发表于2018-05-23 23:46 被阅读0次

    解密类型转换:if(xx)和 a==b的判断

    正在学习JS函数,感觉很懵,可能是有某个点没有理解,所以导致串联不起来吧!然后准备不看函数了,写一篇关于if(xx)和a==b的判断

    首先我们先来说一下相等的概念:

    我们知道可以使用==或===判断两个值的相等性,其中区别相信大家清楚,===是严格相等的意思,只需要注意NaN和NaN不等就行了。而使用==的时候,JavaScript会帮我们做类型转换,造成一些匪夷所思的结果,那么使用==的时候会在那些情况下做类型转换,又会换成什么样子呢?

    • 如果两个值类型相同,则执行严格相等的运算
    • 如果两个值的类型不同,那么就好玩了,看下面吧
      1、如果一个是null,一个是undefined,那么相等(可以硬背下来)
      2、如果一个是数字,一个是字符串,先将字符串转位数字,然后在比较
      3、如果一个值是true/false则将其转为1/0比较
      4、如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
      5、其他就不相等了

    看着判断if(xx)和a==b比较难记,其实可以总结为三句话:

    • 空字符串是false
    • 其他都是true
    • 对象全是true

    觉得没有理解,别慌,看完这个表格你就懂了

    if的判断

    对于括号里的表达式,会被强制转换为布尔类型:

    类型 结果
    undefined false
    Null false
    Boolean 直接判断
    Number +0,-0,或者NaN为false,其他为true
    string 空字符串为false,其他的都是true
    object true

    然后看几个题吧:

    image
    image
    看看上面这题应该不难吧,运用上面表格的东西,转换为布尔类型比较,为true就输出为false就没有输出

    ==的判断
    *对于==的判断,JS是怎么处理的?

    X Y 结果
    null undefined true
    Number string X==toNumber(Y)
    Boolean (any) toNumber(X)==Y
    Object string or Number toprimitive(X)==Y
    otherwise otherwise false

    toNumber

    type Result
    Undefined nan
    Null 0
    Boolean true->1,false->0
    String "abc"->NaN,"123"->123

    toPrimitive

    对于Object类型,先尝试调用valueOf方法获取结果,如果没定义,在尝试调用toString方法获取结果

    现在在看下题目吧

    image
    image
    image

    这里需要注意的就是遇到取反的时候就是转换成布尔,在进行比较;还有就是undefined==null比较特殊,这是比较死的,记住相等就可以了

    在做题的时候打开JS亲自动手,印象会更加深刻

    相关文章

      网友评论

          本文标题:解密类型转换:if(xx)和 a==b的判断

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