美文网首页
关于 if(xx)与 a == b 的判断

关于 if(xx)与 a == b 的判断

作者: 饥人谷_清水 | 来源:发表于2018-07-31 10:36 被阅读0次

    1. if(xx)的判断


    括号里的表达式,会被强制转换为布尔类型,原理如下表:

    表达式类型 转换结果
    undefined false
    null false
    boolean 直接判断
    number 0, +0, −0, 或者 NaN 为 false, 其他为 true
    string 空字符串为 false,其他都为 true
    object true

    转换结果示例
    Undefined

    var a;
    if(a) {
      console.log('Hello World!')
    }
    //不输出
    

    Boolean

    if(true) {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    
    if(false) {
      console.log('Hello World!')
    }
    //不输出
    

    Number

    if(0) {
      console.log('Hello World!')
    }
    //不输出
    
    if(+0) {
      console.log('Hello World!')
    }
    //不输出
    
    if(NaN) {
      console.log('Hello World!')
    }
    //不输出
    
    if(123) {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    

    String

    if('') {
      console.log('Hello World!')
    }
    //不输出
    
    if(' ') {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    
    if('123') {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    
    if('abc') {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    

    Object

    if([0]) {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    
    if([0, 1, 2]) {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    
    if({1, 2, 3}) {
      console.log('Hello World!')
    }
    //输出结果:Hello World!
    

    2. a == b 的判断


    对于相同数据类型a,b的判断较为简单,不作描述。以下记录不同数据类型的a,b的转换与判断。
    原理:

    a数据类型 b数据类型 转换与判断结果
    null undefined true
    number string a == toNumber(b)
    boolean (any) toNumber(a) == b
    object number或string toPrimitive(a) == b
    otherwise otherwise false

    toNumber()转换原理:

    类型 转换结果
    undefined NaN
    null 0
    boolean ture -> 1, false -> 0
    string 纯数字的字符串转换为数值,其它的为NaN

    null == undefined

    null == undefined //true
    

    number == string
    将String转换为Number再行判断,a == toNumber(b),若b无法转换为数字,则结果为false

    '' == 0 //true
    '0' == 0 //true
    '123' == 123 //true
    '1.23' == 1.23  //true
    'abc' == 0 // false
    'abc123' == 123  // false
    

    boolean == (any)
    boolean在运算中转换数值有两种结果,true转换为1,false为0

    true == ''  //false
    false == '' //true
    true == ' ' //false
    false == ' '  //true
    true == '1.23'  //false
    false == '1.23'  //false
    true == '1' // true
    false == '1' // false
    true == '0' // false
    false == '0' // true
    

    object == number或string
    对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

    [] == true  //false
    
    var obj = { 
      a: 0, 
      valueOf: function(){return 1} 
    } 
    obj == "[object Object]" //false
    
    obj == 1  //true
    obj == true // true
    

    相关文章

      网友评论

          本文标题:关于 if(xx)与 a == b 的判断

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