类型转换

40 阅读3分钟

类型转换

  • 说明:任何的语言中都有一条规则。

      不同种类的数据不能一起进行运算。
      如果需要不同类型之间的数据进行混合运算,那么需要将不同种类的数据
      转换为同类型的数据之后才能运算。 所谓的类型转换。
    
  • 类型转换分为两种:

  1. 显式类型转换 | 强制类型转换 (程序员通过js代码进行类型转换)
  2. 隐式类型转换 |自动的类型转换(对于程序员是透明,不需要参与)。

 注意:所有的隐式转换都是在底层完成的。js引擎。所有的转换都是依赖函数
    来完成的。也是依赖的NumberBooleanString

Number()显式类型转换

显式类型转换:转换为Number类型。
    通过Number() 函数进行显式转换。
    格式:Number(需要转换的数据)
  • String-->Number
    console.log (Number("123"));//123
    console.log (Number("123a"));//NaN
    console.log ( parseInt("123a"));//123
    console.log (Number("  123"));//123
    console.log (Number("  \t\r123\n  "));//123
    console.log (Number("abc"));//NaN
    console.log (Number(""));//0
    console.log (Number("true"));//NaN
  • Boolean-->Number
    console.log (Number(true));//1
    console.log (Number(false));//0
  • Null-->Number
    console.log (Number(null));//0
  • Undefined-->Number
 console.log (Number(undefined));//NaN
  • Array-->Number
 console.log (Number([1]));//1
 console.log (Number([1,2]));//NaN
  • Object-->Number
  console.log (Number({"0":1}));//NaN
  • Function
 console.log (Number(function () {
    }));//NaN

使用Boolean()转换

使用Boolean()函数。进行类型转换。
5种情况下会转换为false,其他的都是true0"" , null , undefined, NAN
  • 0,"" , null , undefined, NAN 转换为 false
   console.log (Boolean(+0));//false
    console.log (Boolean(-0));//false
    console.log (Boolean(""));//false
    console.log (Boolean(null));//false
    console.log (Boolean(undefined));//false
    console.log (Boolean(NaN));//false
    console.log (Boolean(false));//false
console.log (Boolean(-1));//true
console.log (Boolean(-Infinity));//true
console.log (Boolean("false"));//true
console.log (Boolean({}));//true
console.log (Boolean([]));//true
console.log (Boolean(function () {
   }));//true

使用String()进行转换

将任意类型转换为字符串
通过函数 String(数据)
console.log (String(true));//true
console.log (String(0));//0 
console.log (String(NaN));//NaN 
console.log (String(Infinity));//Infinity 
console.log (String(null));//null 
console.log (String(undefined));//undefined
console.log (String([1,2]));//1,2 
console.log (String({}));//[object Object] 
var obj = {}; 
console.log (obj.toString());//[object Object]
console.log (String({name:"小刚"}));//[object Object]
console.log (String(function () { console.log (1); })); // function () { // console.log (1); // }

隐式转换为Number类型

  • 隐式类型转换是需要触发条件的。
  1. 当当前的环境需要将操作数当做数值型的数据进行计算的时候,那么就会将其他的类型隐式转换为Number类型之后再做运算。
  2. 隐式的转换底层使用Number()函数转换。
隐式转换的环境:通常是四则运算
   console.log (true * 10);//10
   console.log ("123" - 1);//122
   console.log (false + 1);//1
   console.log (undefined * 1);//NaN
   console.log ("abc" / 2);//NaN

隐式转换Boolean类型

当环境需要一个布尔类型的数据的时候,如果当前数据不是布尔类型, 那么就会进行隐式转换,转换的规则通过显式转换。
  • 只有5种情况下是false,其他的都是true
5种:0nullundefined""NaN
  • 需要布尔值的环境:if、三目、循环条件等等
    var ran = ~~(Math.random () * 10);
    console.log (ran);
    //触发隐式转换。ran % 2   0:false   1:true
    var result = ran % 2 ? "奇数" : "偶数";
    console.log (result);

    //触发隐式转换。"abc"/10==NaN 会转换为 false
    console.log ("abc"/10 ? "true":"false");

隐式转换String类型

任意类型,当和String进行 + 连接的时候,其他的任意类型都会被底层隐式转换为String,然后再做 + 连接。
  • 隐式转换的规则同显式转换。
  • 触发的环境:+ 连接操作。
    console.log ("a" + 1);//a1
    console.log (true + 1 + "a");//2a
    console.log (null + "a");//nulla
    console.log (undefined + "a");//undefineda
    console.log (NaN + "a");//NaNa
    console.log (1 + 2 + "3");//33
    console.log ("3" + 2 + 1);//321
    console.log ([1,2]+"3");//1,23
    console.log ({}+"a");//[object Object]a