← 返回目录

5. typeof 与类型转换

怎么知道一个箱子里装的是数字还是文字?怎么把文字变数字?本页解决认类型转类型两件事。

核心三步:
typeof——认类型,返回类型字符串
Number() / parseInt() / parseFloat()——转数字
String() / toString()——转字符串

坑:typeof null 返回 "object"(历史 bug)、parseInt("12px") 得 12、空字符串转数字得 0

5.1 互动演示

输入 "3.14"、"3.14abc"、"abc" 分别点。

5.2 知识点逐条讲解(配合代码)

typeof:问一句"你是什么类型"

有时候你不确定箱子里装的是数字还是文字,就用 typeof 变量名 问它一句,它会"递出"一个类型的名字(这个动作叫"返回",就是把结果交出来)。

// 装个数字 10
let num = 10;
console.log(typeof num);

// 装一段文字 10(带引号,是字符串)
let str = '10';
console.log(typeof str);

// 布尔值,只有 true/false 两种
let bool = true;
console.log(typeof bool);

// 只要箱子,没放东西
let undef;
console.log(typeof undef);

// 你主动把箱子设成空
let empty = null;
// 答 "object",这是 JS 历史 bug
console.log(typeof empty);

如果你看到 typeof null 答 "object" 觉得自己写错了,其实没写错——这是 JS 第一版留下的历史 bug,全世界都知道,但改它会让无数老网站崩掉,所以一直留着。判断是不是 null,得单独写 x === null

② 把数字变成文字:三种办法

有时候你需要把数字"123"变成能拼进句子的文字。有三种常用办法:

办法怎么写感觉
String()String(num)主动喊它变
toString()num.toString()主动喊它变
加个空字符串num + ''浏览器偷偷帮你变
// 现在是数字
let n = 123;
// "123" → 变成文字了
console.log(String(n));
// "123"
console.log(n.toString());
// "123" → 一加空文字,整体就成文字了
console.log(n + '');

③ 把文字变成数字:Number / parseInt / parseFloat

从输入框拿到的都是文字(比如 "3.14"),要算数就得先变数字。三个工具性格不一样:

工具性格"3.14abc" 转出来
Number()较真:整个必须是合法数字,有一点杂质就转成 NaN(算不出来)NaN
parseInt()捞整数:从左往右捞,碰到非数字就停3
parseFloat()捞小数:从左往右捞,能带小数点3.14
// 3.14
Number("3.14");
// NaN(里面有 abc,较真的它不干)
Number("3.14abc");
// 3(只捞开头的整数)
parseInt("3.14abc");
// 3.14(把开头的小数也捞出来)
parseFloat("3.14abc");
// NaN
Number("abc");

如果 Number('123abc') 和 parseInt('123abc') 你以为结果一样,其实不一样:Number 较真是 NaNparseInt 会"捞"出 123。这是自测题里的高频题,记住"Number 较真、parse 能捞"。

实战:用在哪 / 常见坑 / 怎么解决

① 可能在什么地方用:校验用户输入是不是数字;把表单里的字符串转成数字再计算。

② 常见的问题:Number('123abc') 得到 NaN 还接着算;或者看到 typeof null 是 object 以为自己写错了。

③ 解决思路:转完用 isNaN() 检查一下是不是 NaN;判空值要单独写 === null,别只靠 typeof

一句话记住:typeof 用来问类型;typeof null 答 object 是历史 bug,判 null 要写 === null;转文字用 String()/toString()/+'';转数字 Number 较真、parseInt 捞整、parseFloat 捞小数

本页重点

API作用参数返回值代码示例
String()把值转成字符串任意值字符串let num = 123;
console.log(String(num));
toString()数字/值转字符串(方法写法)字符串let num = 123;
console.log(num.toString());
Number()把值转成数字任意值数字 / NaNconsole.log(Number("3.14"));
parseInt()取整数部分字符串, 进制整数 / NaNconsole.log(parseInt("3.14abc")); // 3
parseFloat()取小数部分字符串小数 / NaNconsole.log(parseFloat("3.14abc")); // 3.14
typeof查转换完是什么类型任意值类型字符串console.log(typeof 123); // "number"