美文网首页
if(xx)和 a==b

if(xx)和 a==b

作者: 易景平 | 来源:发表于2018-06-22 22:00 被阅读0次

    一.对于if()括号里的表达式会被强制转换为布尔类型。

    判断原理如下:

    • undefined --> false
    • null -->false
    • false -->false
    • +0,-0 ,NaN -->false 【其他number(数字)为true】
    • ""或''(空字符串)-->false【其他string(字符串,包含" "空白字符串)为true】

    二.js对==判断的处理

    比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。类型转换规则如下。

    1. 原始类型的数据会转换成数值类型再进行比较。
    1 == true // true
    // 等同于 1 === Number(true)
    
    0 == false // true
    // 等同于 0 === Number(false)
    
    2 == true // false
    // 等同于 2 === Number(true)
    
    2 == false // false
    // 等同于 2 === Number(false)
    
    'true' == true // false
    // 等同于 Number('true') === Number(true)
    // 等同于 NaN === 1
    
    '' == 0 // true
    // 等同于 Number('') === 0
    // 等同于 0 === 0
    
    '' == false  // true
    // 等同于 Number('') === Number(false)
    // 等同于 0 === 0
    
    '1' == true  // true
    // 等同于 Number('1') === Number(true)
    // 等同于 1 === 1
    
    '\n  123  \t' == 123 // true
    // 因为字符串转为数字时,省略前置和后置的空格
    
    1. 对象与原始类型值比较 时,对象转化成原始类型的值,再进行比较。
    [1] == 1 // true
    // 等同于 Number([1]) == 1
    
    [1] == '1' // true
    // 等同于 Number([1]) == Number('1')
    
    [1] == true // true
    // 等同于 Number([1]) == Number(true)
    

    上面代码中,数组[1]与数值进行比较,会先转成数值,再进行比较;与字符串进行比较,会先转成数值,然后再与字符串进行比较,这时字符串也会转成数值;与布尔值进行比较,两个运算子都会先转成数值,然后再进行比较。

    1. undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。
    false == null // false
    false == undefined // false
    
    0 == null // false
    0 == undefined // false
    
    undefined == null // true
    
    1. 相等运算符隐藏的类型转换,会带来一些违反直觉的结果。
    0 == ''             // true
    0 == '0'            // true
    
    2 == true           // false
    2 == false          // false
    
    false == 'false'    // false
    false == '0'        // true
    
    false == undefined  // false
    false == null       // false
    null == undefined   // true
    
    ' \t\r\n ' == 0     // true
    

    相关文章

      网友评论

          本文标题:if(xx)和 a==b

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