隐式数据类型转换

首先来看段代码:

1.隐式转换为Number

   var num = 1 + true;
   console.log(num) /* 1+1 = 2 */

   var num = 1 + false;
   console.log(num) /* 1+0 = 1 */

   var num = 1 + NaN;
   console.log(num) /* 1+NaN = NaN */

   var num = 1 + "aaa";
   console.log(num) /* "1"+"aaa" = "aaa" */

   var num = "aaa" + false;
   console.log(num) /* "aaa"+"false" = "aaafalse" */

   var num = "aaa" + NaN;
   console.log(num) /* "aaa"+"NaN" = "aaaNaN" */

我们可以发现:

  任何数字在与非字符串类型的值进行运算(相加、相减、相乘、相除、模除)时,会先将不是 number 类型的值转换为 number 类型再进行计算。

  字符串类型的值在和其他值进行相加运算时,会将先将不是 string 类型的值转换为 string 类型再进行拼接,可以利用这一点对某变量进行类型转换:

   var num = 10;
   num = num + ""
   console.log(num) /* "10"+"" = "10" */
   console.log(typeof num) /* string */

这就是数据类型的隐式转换!当然,既然是运算,那么必然遵守运算法则

   var res = 10 + 15 + "25";
   console.log(res) /* "2525" */

   var res = "80" + 20 + 10;
   console.log(res) /* "802010" */

如上代码:遵循加法运算法则,从左到右依次计算:

              10+15 = 25 => 25+“25” = “2525” 。

              “80”+20 =“8020” => “8020”+10 = “802010”

需要注意的是:当字符串与任意类型的变量进行减法、乘法、除法、模除运算时,会先将所有变量转换为 number 再进行计算。

   var res = "100" - Object;
   console.log(res) /* 100 - NaN = NaN */

   var res = "100" - true;
   console.log(res) /* 100 - 1 = 99 */

   var res = "100" - "10";
   console.log(res) /* 100 - 10 = 90 */

   var res = "100" - NaN;
   console.log(res) /* 100 - NaN = NaN */

   var res = "100" - null;
   console.log(res) /* 100 - 0 = 100 */

   var res = "100" - undefined;
   console.log(res) /* 100 - NaN = NaN */

   var res = "was" - "sss";
   console.log(res) /* NaN - NaN = NaN */

利用这一特性:

    var res = "100000" - "0";
    console.log(res) /* 100000 - 0 = 100000 */
   var res = -"100000";
    console.log(res) /* -100000= -100000 */
 

总结:可以通过二元运算符  -、*、/ 、% 将纯数字的字符串隐式转换为Number,也可以使用一元运算符(+、- 正负号)。

 

2.隐式转换为Boolean

    var i = 1;
    i = !!i;
    console.log(i);/* true */

总结:通过两个逻辑运算符非 ! 可以对值进行Boolean类型转换,相当于使用了Boolean() 。

posted @ 2021-04-06 22:23  coder、L  阅读(418)  评论(0编辑  收藏  举报