类型转换

TypeScript 中,你可以将一种类型的值转换为其他类型。转换方式有两种:一种是显式转换,即在代码中直接调用转换相关函数;另一种是隐式转换,不直接调用转换相关函数,而用一些其他的运算符进行操作,触发自动转换。本节主要讲述显式转换,隐式转换会在第 4 章中讲述。

将其他类型转换为布尔类型

要将其他类型的值转换为布尔类型,只需要将待转换的值传入 Boolean() 函数,示例代码如下。

var msg: string = "ok";
var msgToBollean: boolean = Boolean(msg); //得到true

Boolean() 函数会判断传入的值是表示空值还是非空值。若表示非空值,返回 true;若表示空值,返回 false。在 TypeScript 中,以下 5 种值在一定程度上都有空值的含义,转换后会返回 false,而对于其他的值都返回 true

  • undefined(无初始值)。

  • null(无值)。

  • NaN(非正确数字)。

  • 0

  • ""(空字符串)。

示例代码如下。

console.log(Boolean(undefined)); //输出false
console.log(Boolean(null));      //输出false
console.log(Boolean(0));         //输出false
console.log(Boolean(""));        //输出false
console.log(Boolean(NaN));       //输出false
console.log(Boolean(-1));        //输出true
console.log(Boolean("false"));   //输出true

将其他类型转换为数值类型

将其他类型的值转换为数值类型的函数有以下 3 个。

  • parseInt():将字符串类型的值转换为整型数值。

  • parseFloat():将字符串类型的值转换为浮点型数值。

  • Number():将任意类型的值转换为数值类型的值。

接下来将分别进行介绍。

  1. parseInt()

    parseInt() 函数可以将传给它的代表数字的字符串转换成整数,示例代码如下。

    let scoreString: string = "100";
    let score: number = parseInt(scoreString); //100

    在转换时,需要注意以下几点。

    • 该函数在转换时会忽略前面的空格,会从第一个非空字符串开始解析,如果解析过程中遇到非数字字符,会从这里开始忽略它及它以后的所有字符串,示例代码如下。

      console.log(parseInt("     100")); //输出100
      console.log(parseInt("100y01"));   //输出100
    • 如果待转换的字符串的首个非空格字符串不是数字或正负号,则会返回 NaN,示例代码如下。

      console.log(parseInt("y100"));  //输出NaN
    • 在转换时会忽略小数点后的数值。

      console.log(parseInt("100.1")); //输出100
  2. parseFloat()

    parseFloat()parseInt() 函数类似,但该函数将传给它的代表数字的字符串转换成浮点数,示例代码如下。

    let scoreString: string = "99.9";
    let score: number = parseFloat(scoreString); //99.9

    在转换时需要注意以下几点。

    • parseInt() 函数类似,parseFloat() 函数也会忽略字符串开头的空格,解析过程中如果遇到非浮点数字符(除正负号,小数点,0-9或科学记数法的指数 e 或 E 字符),会从这里开始忽略它及它以后的所有字符串,示例代码如下。

      console.log(parseFloat("     -99.9")); //输出-99.9
      console.log(parseFloat("99.9y01"));    //输出99.9
    • 字符串中的第二个小数点无效。示例代码如下。

      console.log(parseFloat("99.9.88"));    //输出99.9
    • 如果没有小数点,或小数点后面的数字为 0,转换出的数值实际上为整数。

  3. Number()

    Number() 函数可以将传给它的任意类型的值转换成数值类型。对于不同的待转换类型,其转换规则略有不同。接下来,将分别进行介绍。

    • 将布尔类型转换为数值类型

      当将布尔类型转换为数值类型时,true 会转换为 1false 会转换为 0,示例代码如下。

      console.log(Number(true));  //输出1
      console.log(Number(false)); //输出0
    • undefinednull""(空字符串)等空值转换为数值类型

      null"" 将会被转换为 0,而 undefined 将会被转换为 NaN,示例代码如下。

      console.log(Number(undefined)); //输出NaN
      console.log(Number(null));      //输出0
      console.log(Number(""));        //输出0
    • 将字符串类型转换为数值类型

      当进行这种转换时,其规则和使用 parseFloat() 函数进行转换类似,区别在于 Number() 函数要求字符串的非空字符必须是严格的数字形式,否则会直接返回 NaN,示例代码如下。

      console.log(Number("99.9    "));   //输出99.9
      console.log(Number("     -99.9")); //输出-99.9
      console.log(Number("99.9y01"));    //输出NaN
      console.log(Number("99.9.88"));    //输出NaN

将其他类型转换为长整型

BigInt() 函数可以将传给它的数值类型和字符串类型的值转换为长整型,示例代码如下。

let bigint1: bigint = BigInt("124573945793");
let bigint12: bigint = BigInt(1232434531);

BigInt() 函数要求字符串的非空字符必须是严格的整数形式,否则会在运行时报错。

将其他类型转换为字符串类型

使用以下两种方式可以将其他类型的值转换为字符串类型。

  • 通过 String() 构造函数产生新的字符串。

  • 通过调用其他类型的 toString() 方法来进行转换。

接下来,分别进行介绍。

  1. 调用 String()

    几乎所有类型都可以通过 String() 产生新的字符串,示例代码如下。

    let string1: string = String(99.9);      //得到"99.9"
    let string2: string = String(true);      //得到"true"
    let string3: string = String(null);      //得到"null"
    let string4: string = String(NaN);       //得到"NaN"
    let string5: string = String(undefined); //得到"undefined"
  2. 调用 toString()

    调用其他类型的 toString() 方法来进行转换,示例代码如下。

    let number1: number = 99.9;
    let boolean1: boolean = true;
    let bigint1: bigint = 666n;
    let nanNumber: number = NaN;
    console.log(number1.toString());   //输出"99.9"
    console.log(boolean1.toString());  //输出"true"
    console.log(bigint1.toString());   //输出"666"
    console.log(nanNumber.toString()); //输出"NaN"

    注意,nullundefined 两种表示无值的类型不具备该方法。