15. ArkTS类型转换的 6 个坑,90% 的人都踩过
布尔值转成字符串,三种写法,结果一样。String() 最直接。加空字符串最省事。toString() 是方法调用。
动画视频在《ArkTS类型转换的 6 个坑,90% 的人都踩过》。
let isOpen: boolean = true; let isClose: boolean = false; let s1: string = String(isOpen); console.log(s1, typeof s1); let s2: string = isClose + ''; console.log(s2, typeof s2); let s3: string = isOpen.toString(); console.log(s3, typeof s3);
true 变成 "true",false 变成 "false"。typeof 都是 "string"。
先开启预览器,再打开日志面板,按 Ctrl + S 保存,才能看到输出。后面的 console.log 也一样。
数字转字符串
整数也是这三种。小数要控制位数时,用 toFixed。
let num: number = 42; let price: number = 9.99; console.log(String(num), typeof String(num)); console.log(num + '', typeof (num + '')); console.log(num.toString(), typeof num.toString()); console.log(price.toFixed(1)); console.log((0.1 + 0.2).toFixed(2));
42 三种都得到 "42",类型是 "string"。
toFixed 返回的是字符串,并且会四舍五入。9.99 保留 1 位小数,第二位是 9,进位之后是 "10.0"。0.1 + 0.2 在计算机里不是干净的 0.3,toFixed(2) 得到 "0.30"。金额要留几位小数,用它收一下。

字符串转数字
Number() 最严。整串都得是数字,夹了别的字符就得到 NaN。空字符串是个例外,转出来是 0。
let strNum: string = '123'; let strFloat: string = '3.14'; let strMix: string = '12px'; console.log("strNum =", Number(strNum)); console.log("strFloat =", Number(strFloat)); console.log("strMix =", Number(strMix)); console.log("空字符串 =", Number('')); console.log("abc =", Number('abc'));
'123' 是 123,'3.14' 是 3.14。'12px' 和 'abc' 是 NaN。空字符串是 0。
parseInt 只留整数。从左边读,碰到不能当数字的字符就停。
console.log("parseInt(strFloat) =", parseInt(strFloat));
console.log("parseInt(strMix) =", parseInt(strMix));
'3.14' 得到 3。'12px' 读到 px 停下,得到 12。
parseFloat 会把小数留下,碰到不能继续读的字符同样停下。
console.log("parseFloat(strFloat) =", parseFloat(strFloat));
console.log("parseFloat(strMix) =", parseFloat(strMix));
'3.14' 得到 3.14。'12px' 还是 12。
整串必须是数字,用 Number()。要从一串文字里把数字抠出来,用 parseInt 或 parseFloat。拿不准就用 Number(),失败会得到 NaN,能看出来。
字符串转布尔
Boolean() 和两个感叹号 !! 是同一条规则。空字符串是 false,非空字符串都是 true。里面写的是 'false' 还是 '0',不影响。
console.log("Boolean('') =", Boolean(''));
console.log("Boolean('false') =", Boolean('false'));
console.log("Boolean('0') =", Boolean('0'));
console.log("Boolean(' ') =", Boolean(' '));
console.log("Boolean('hello') =", Boolean('hello'));
console.log("!!'false' =", !!'false');
console.log("!!'' =", !!'');
空字符串是 false。'false'、'0'、一个空格、'hello' 都是 true。空格也算有字符。!!'false' 同样是 true,!!'' 是 false。

转换前先看类型
直接转,失败就是 NaN。先看类型,再转,再检查结果。
let input: string = '123'; let bad: string = 'abc'; console.log(typeof input); console.log(typeof 123); console.log(typeof true);
typeof 返回的是字符串:"string"、"number"、"boolean"。
let n1: number = Number(input); let n2: number = Number(bad); console.log("Number.isNaN(n1) =", Number.isNaN(n1)); console.log("Number.isNaN(n2) =", Number.isNaN(n2)); console.log("Number.isFinite(n1) =", Number.isFinite(n1)); console.log("Number.isFinite(n2) =", Number.isFinite(n2)); console.log("Number.isFinite(Infinity) =", Number.isFinite(Infinity));
'123' 转出来不是 NaN,Number.isNaN(n1) 是 false。'abc' 转出来是 NaN,Number.isNaN(n2) 是 true。
Number.isFinite 看它是不是一个有限的数。n1 是 true。NaN 和 Infinity 都是 false。
判断一个字符串能不能转成数字:先 Number(),再用 Number.isNaN() 看结果。

浙公网安备 33010602011771号