类型转换
在 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()
:将任意类型的值转换为数值类型的值。
接下来将分别进行介绍。
-
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
-
-
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,转换出的数值实际上为整数。
-
-
Number()
Number()
函数可以将传给它的任意类型的值转换成数值类型。对于不同的待转换类型,其转换规则略有不同。接下来,将分别进行介绍。-
将布尔类型转换为数值类型
当将布尔类型转换为数值类型时,
true
会转换为1
,false
会转换为0
,示例代码如下。console.log(Number(true)); //输出1 console.log(Number(false)); //输出0
-
将
undefined
、null
、""
(空字符串)等空值转换为数值类型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()
方法来进行转换。
接下来,分别进行介绍。
-
调用
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"
-
调用
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"
注意,
null
和undefined
两种表示无值的类型不具备该方法。