Skip to content

JavaScript 数据类型

JavaScript 中的原始类型与引用类型,以及 typeof 如何帮你检查它们。

你将学到

  • 七种原始类型:string、number、boolean、null、undefined、symbol、bigint
  • 引用类型:object(包括数组和函数)
  • typeof 的行为(以及它与 null 的著名怪癖)
  • 类型转换:隐式 vs 显式
  • null 与 undefined 的区别

概念讲解

原始值 vs 引用值

JavaScript 的值分为原始值对象

原始类型(7 种)

  1. string——文本,如 "hello"'world'
  2. number——整数和浮点数统一表示,如 423.14
  3. boolean——truefalse
  4. null——有意表示"无值"
  5. undefined——变量已声明但未赋值
  6. symbol——唯一且不可变的标识符(ES6)
  7. 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。

相关工具

相关速查表

练习 JavaScript 数据类型

1 个练习

练习 JavaScript 数据类型

查阅不认识的术语

新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。

查看术语表

动手做项目

通过引导式项目应用所学,含起始代码与解决方案。

查看项目

解读错误信息

用大白话解释常见错误——什么意思、为什么发生、如何修复。

查看错误