JavaScript: JavaScript 数据类型

最后更新:2026-10-13

数据类型决定了数据能做什么操作——数字能加减,字符串能拼接,布尔能判断。搞清楚类型,才能避免 JS 最经典的那些坑。

相关全局方法:Array.isArray() Number.isNaN() parseInt() Number() typeof

1. JS 的数据类型

JavaScript 有 8 种数据类型,分为基本类型和引用类型两大阵营:

基本类型(7种):String、Number、BigInt、Boolean、Undefined、Null、Symbol

引用类型(1种):Object(数组、函数、日期等都是 Object 的子类型)

基本类型的数据存在栈内存中,赋值时拷贝值;引用类型的数据存在堆内存中,赋值时拷贝引用(地址)。这个区别后续课程会深入讲。


typeof 是检测数据类型的运算符,返回一个字符串:

值 typeof 结果
"hello" "string"
42 "number"
9007199254740991n "bigint"
true "boolean"
undefined "undefined"
null "object" (历史bug)
{ } "object"
function(){} "function"

注意:typeof null 返回 "object"——这是 JS 诞生时的一个历史 bug,修不了了(改了会破坏老代码),记住就好。


3. 字符串和数字的陷阱

JS 中 + 运算符有两个用途:数字相加和字符串拼接。当 + 两边有字符串时,JS 会把另一个值也转成字符串来拼接:

这是 JS 最经典的陷阱之一,新手必踩。解决方法:做数学运算前用 Number() 或 parseInt() 显式转换。


4. null vs undefined 的区别

这两个都表示"没有值",但含义不同:

打个比方:undefined 是新房还没搬家具,null 是你主动把家具搬走了。

▶ 示例:typeof 检测各种类型

▶ 试一试

▶ 示例:字符串与数字的陷阱

▶ 试一试

▶ 示例:null 与 undefined 的区别

▶ 试一试

▶ 示例:各种数据类型一览

▶ 试一试

相关全局方法:Array.isArray() Number.isNaN() parseInt() Number() typeof

❓ 常见问题

Q 为什么 typeof null 是 "object"?
A 这是 JS 第一版的历史 bug。当时 JS 用低位标识类型,null 的低位全是 0,和 object 的标识一样,就误判了。后来想修,但改了会破坏大量现有代码,只好将错就错——就像一栋楼的地基歪了,住的人太多没法推倒重来。
Q 怎么判断一个值是数组而不是普通对象?
A typeof 对数组和对象都返回 "object",区分不了。正确方法是用 Array.isArray(),比如 Array.isArray([1,2]) 返回 true,Array.isArray({}) 返回 false。
Q NaN 是什么类型?
A NaN(Not a Number)虽然名字叫"不是数字",但 typeof NaN 返回 "number"。更离谱的是 NaN === NaN 返回 false——自己都不等于自己。判断 NaN 要用 isNaN() 或 Number.isNaN()。

📖 小节

📝 作业

  1. 基础题:声明 6 个变量分别对应 6 种基本类型(String、Number、Boolean、Undefined、Null、Object),用 typeof 逐一检测并在页面上显示结果。
  2. 进阶题:创建一个页面,包含一个输入框,用户输入任意值后,JS 判断其类型(用 typeof)并显示在页面上。尝试输入数字、字符串、true、null 等,观察 typeof 的返回结果。
  3. 挑战题:创建一个"类型陷阱测试"页面,列出 5 道选择题测试用户对类型转换的理解,比如 "1" + 2 等于什么、null == undefined 是 true 还是 false 等,用户点击选项后显示对错和解释。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏