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"。金额要留几位小数,用它收一下。

价格9.99

字符串转数字

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。

字符串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() 看结果。

posted @ 2026-11-07 19:43  老陈说编程  阅读(6)  评论(1)    收藏  举报