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

关于JS中if(xx)和 a==b的判断

作者: XuZiYa | 来源:发表于2018-09-09 16:31 被阅读0次

    1. if结构

    if结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。

    基本形式

    if (布尔值) {
        语句;
    }
    

    注意点:对于if结构,其括号里面的表达式,会被强制转换为布尔类型值。

    下面给出一个例子:

    if ('a') {
      console.log ('hello')
    }
    //hello
    

    这里括号里是一个字符串'a',转换成布尔值是true,所以执行语句console.log ('hello')

    还有一个例子:

    if (0) {
      console.log ('hello')
    }
    

    这里括号里是一个数值0,转换成布尔值是false,所以不执行语句console.log ('hello')

    如何知道一个数据的布尔值是true还是false,我们只需要记住一些特殊的值

    转换成布尔值的结果
    null false
    undefined false
    数值 +0 false
    数值 -0 false
    空字符串 '' false (要跟 ' ' 区分开来,这里中间有个空格,空格字符串转换成布尔值结果是true,跟空字符串不同)
    NaN false

    除了以上这些转换成布尔值是false,其它的转换成布尔值都是true

    注意,if后面的表达式之中,不要混淆赋值表达式(=)、严格相等运算符(===)和相等运算符(==)。尤其是赋值表达式不具有比较作用。

    例子:

    var x = 1;
    var y = 2;
    if (x = y) {
      console.log(x);
    }
    // "2"
    

    上面代码的原意是,当x等于y的时候,才执行相关语句。但是,不小心将严格相等运算符写成赋值表达式,结果变成了将y赋值给变量x,再判断变量x的值(等于2)的布尔值(结果为true)。

    2. 相等运算符 ==

    相等运算符用来比较相同类型的数据时,与严格相等运算符完全一样。比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。

    转换规则

    x y 结果
    null undefined true
    Number String x == toNumber(y)
    Boolean (any) toNumber(x) == y
    object String or Number toNumber(x) == y
    otherwise otherwise false

    ToNumber

    转换后结果
    undefined NaN
    Null 0
    Boolean true转换为数值1;false转换为数值0
    String "abc"非数字类的转换为NaN;"123"数字类的转换为相应的数值123

    Toprimitive

    对于Object来说,当其遇到类型转换时,会先尝试调用valueOf进行转换,如果没有的话,再用toString进行转换;转换成原始类型后,在根据上面的规则转换。

    相等运算符隐藏的类型转换,时常会带来一些违反直觉的结果。所以建议不要使用相等运算符(==),最好只使用严格相等运算符(===)。

    3.参考资料

    JavaScript 教程

    相关文章

      网友评论

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

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