js中if判断语句执行原因–数据类型转换原理

41次阅读

共计 1479 个字符,预计需要花费 4 分钟才能阅读完成。

前言:

相信我们程序员平时写代码用的最多的逻辑就是 if 语句了吧,可你知道他的原理是什么吗,其实这跟 Boolean()这个方法有关,此方法为自动执行(在需要判定 Boolean 的语句中中自动执行),这些转换规则对理解 if 控制语句自动执行相应的 Boolean 转换非常重要,

这是我们平时所写的代码

    var a = "auto"
    if(a){console.log("执行")
    }
    

其实执行起来是这样,理解一下

    var a = "auto"
    if(Boolean(a)){console.log("执行")
    }

这样其实就好理解了,每个类型的值其实都可以转换为 Boolean 值,有一定的规则,接下来我们看看具体操作

取证

将需要转换的数据传递给 Boolean()函数

  • Boolean: 毋庸置疑 true 就是 true,false 就是 false,但是 new Boolean 这里有坑

      var boolean1 = true;  // true;  
      var boolean2 = false; // false; 
      console.log(Boolean(boolean1));
      console.log(Boolean(boolean2));

    // 这里坑来了 Boolean()是返回布尔值,new Boolean()是返回布尔对象(对象里面的值为 false,)

      var x = Boolean(false);
      if (x) {// 这里的代码不会被执行}
      
      var x = new Boolean(false);
      if (x) {// 这里的代码会被执行}
    
    
    

注意不要将基本类型中的布尔值 true 和 false 与值为 true 和 false 的 Boolean 对象弄混了。不要在应该使用基本类型布尔值的地方使用 Boolean 对象。

    var x = Boolean(expression);     // 推荐(Boolean 值)var x = new Boolean(expression); // 不推荐,Boolean 对象里的值不管是 true 还是 false,只要对象有值都会判定为 true,if 语句中都会执行、

  • String: 只要不是空字符串(没有任何内容), 任何非空字符串(包含空格) 都会转换为 true
    var str1 = "";  //"" --> false
    var str2 = ""; //" " --> true;
    var str3 = "abc"; // " " --> true;
    console.log(Boolean(str1));
    console.log(Boolean(str2));
    console.log(Boolean(str3));


  • Number: 只有 0 和 NaN 会转换为 false,其他都会转换为 true
    var num1 = 0;  //false
    var num2 = -1; //true
    var num3 = 1;  //true
    var num4 = NaN; //false
    console.log(Boolean(num1));        
    console.log(Boolean(num2)); 
    console.log(Boolean(num3));       
    
    


  • null、undefined:都会转换为 false
    var n = null;  //false
    var u = undefined;  //false
    console.log(Boolean(n)); 
    console.log(Boolean(u));  
    

总结:

false / “” / NaN / 0 / null / undefined 都会转换为 false

注意 Boolean() 和 new Boolean()的区别
前者生成布尔值,后者生成布尔对象,后者不推荐使用

参考:

大部分取经于 js 高程红宝书 26 页,3.4.4 章节(Boolean 类型的介绍)
new Boolean()的坑取经于 MDN 中 Boolean 的描述

正文完
 0