JavaScript 数据类型
JavaScript 中的原始类型与引用类型,以及 typeof 如何帮你检查它们。
你将学到
- 七种原始类型:string、number、boolean、null、undefined、symbol、bigint
- 引用类型:object(包括数组和函数)
- typeof 的行为(以及它与 null 的著名怪癖)
- 类型转换:隐式 vs 显式
- null 与 undefined 的区别
概念讲解
原始值 vs 引用值
JavaScript 的值分为原始值和对象。
原始类型(7 种)
string——文本,如"hello"或'world'number——整数和浮点数统一表示,如42或3.14boolean——true或falsenull——有意表示"无值"undefined——变量已声明但未赋值symbol——唯一且不可变的标识符(ES6)bigint——任意精度整数,如9007199254740993n
原始值是不可变的——当你"修改"一个字符串时,实际上是创建了一个新字符串。
对象(引用类型)
所有非原始值都是对象:普通对象、数组、函数、日期、正则、Map、Set 等。对象是可变的,且按引用存储,因此两个变量可以指向同一个对象。
const a = [1, 2, 3];
const b = a; // b 指向同一个数组
b.push(4);
console.log(a); // [1, 2, 3, 4]——a 也变了!
typeof 运算符
typeof 返回描述类型的字符串。它适用于所有原始类型,但有一个著名怪癖:
typeof "hi" // "string"
typeof 42 // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof Symbol() // "symbol"
typeof 10n // "bigint"
typeof {} // "object"
typeof [] // "object" ← 数组也是对象
typeof null // "object" ← 历史遗留 bug,从未修复
typeof function(){} // "function"
null vs undefined
undefined表示变量已声明但未赋值,或函数没有返回值。null是你自己赋的显式"无值",用来表示空。
用 === null 或 === undefined(严格相等)来检查,不要用 == null 宽松相等。
类型转换
JavaScript 在某些运算中会自动转换类型,结果可能出人意料:
"5" + 3 // "53" ← 字符串拼接
"5" - 3 // 2 ← 数值减法
0 == "" // true ← 宽松相等会转换类型
0 === "" // false ← 严格相等不会
经验法则:始终使用 === 和 !==(严格相等)以避免转换陷阱。需要时用 Number()、String()、Boolean() 显式转换类型。
示例代码
// 用 typeof 检查类型
const samples = [
"hello",
42,
true,
null,
undefined,
{ name: "Ada" },
[1, 2, 3],
function () {},
10n,
Symbol("id"),
];
for (const value of samples) {
console.log(typeof value, "→", value);
}
// null vs undefined
let notAssigned;
console.log(notAssigned); // undefined
console.log(null); // null
console.log(typeof null); // "object" (历史遗留 bug)
// 严格相等 vs 宽松相等
console.log(0 === ""); // false
console.log(0 == ""); // true ← 避免使用 ==
typeof 是检查值类型最快的方式。记住 null 的怪癖,并始终优先使用 === 而非 == 以避免隐式类型转换。
动手试一试
- JSON Formatter
JavaScript 对象和数组长得像 JSON——格式化并检查它们。
- JSON Validator
验证你在 JavaScript 中构建的 JSON 数据结构。
常见错误
错误写法
使用 == 而非 ===,被类型转换坑到
正确做法
始终使用 === 和 !==(严格相等)。它们不会转换类型,所以 0 === '' 为 false。需要转换时请显式进行。
错误写法
期望 typeof null 返回 'null'
正确做法
由于原始 JavaScript 引擎中的历史遗留 bug,typeof null 返回 'object'。请用 value === null 显式检查 null。
相关资源
相关工具
- JSON Tree Viewer
可视化浏览嵌套的 JavaScript 对象。
相关速查表
- JavaScript Cheatsheet
数据类型参考与转换辅助。
练习 JavaScript 数据类型
1 个练习
查阅不认识的术语
新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。
动手做项目
通过引导式项目应用所学,含起始代码与解决方案。
解读错误信息
用大白话解释常见错误——什么意思、为什么发生、如何修复。