人人都会AI编程

基本类型:Undefined、Null、Boolean、Number、BigInt、String、Symbol

更新时间:2026-07-11

JavaScript 中的数据类型分为基本类型(Primitive)引用类型(Object)。基本类型直接存储于栈内存,按值访问,不可变(一旦创建就无法被修改)。理解它们的特性和差异,是写出稳健代码的第一步。

Undefined 类型

Undefined 类型只有一个值 undefined。当一个变量被声明但未赋值时,它的值就是 undefined

let a;
console.log(a); // undefined

常见出现场景:

  • 变量声明未初始化
  • 函数没有返回值时,默认返回 undefined
  • 对象中不存在的属性,访问结果为 undefined
  • 函数参数未传递时,对应形参为 undefined

实用注意:
不要主动将变量赋值为 undefined,让它的语义保持为“缺少值”的系统默认状态。如果需要明确表示“空值”,使用 null

Null 类型

Null 类型也只有一个值 null。它表示一个被明确赋予的“空”,代表“无对象引用”或“故意留空”。

let obj = null; // 明确指示 obj 应该是对象,但当前为空

历史小坑:
typeof null 返回 "object",这是 JavaScript 语言设计上的一个遗留 bug。判断一个值是否为 null 应使用严格相等 === null

Boolean 类型

Boolean 类型只有两个字面值:truefalse。常出现在条件语句中,许多类型的值可以被转换为布尔值。

以下值转换为 false(falsy 值):

  • false0-00n(BigInt 零)、""(空字符串)、nullundefinedNaN

其余所有值转换为 true(truthy 值),包括空对象 {} 和空数组 []

if ({}) {
  console.log("执行了"); // 一定会输出
}

Number 类型

Number 类型基于 IEEE 754 双精度浮点数标准,整数和浮点数统一存储。核心特点:

  • 整数范围安全:Number.MAX_SAFE_INTEGER(2⁵³ - 1)和 Number.MIN_SAFE_INTEGER(-2⁵³ + 1),超出此范围的整数运算可能不精确。
  • 浮点数存在精度问题,经典案例 0.1 + 0.2 !== 0.3
  • 特殊值:Infinity-InfinityNaN(Not a Number)。

判断 NaN 只能用 isNaN()Number.isNaN(),因为 NaN === NaNfalse

const result = 0 / 0; // NaN
console.log(result === result); // false
console.log(Number.isNaN(result)); // true

BigInt 类型

BigInt(ES2020 引入)用来表示任意大的整数,弥补 Number 类型的整数范围限制。创建方式:整数后加 n 或使用 BigInt() 函数。

const big = 9007199254740991n + 1n; // 可以精确运算
const alsoBig = BigInt("9007199254740992");

重要约束:

  • 不能与普通 Number 直接混合运算,需显式转换。
  • 除法结果会向零取整。
  • 不支持 Math 对象中的绝大多数方法。

String 类型

字符串表示文本数据,由 16 位无符号整数组成的不可变序列。可用单引号、双引号、反引号(模板字符串)表示。

const name = "JavaScript";
const greeting = `Hello, ${name}!`; // 模板字符串支持插值
  • length 属性表示字符数量(实际上是 16 位码元的个数,某些表情符号等可能占用两个码元)。
  • 字符串不可变:任何返回新字符串的方法都不会修改原字符串。

Symbol 类型

Symbol(ES6 引入)表示唯一且不可变的值,常用来创建对象的唯一属性键,以免属性名冲突。

const sym1 = Symbol("id");
const sym2 = Symbol("id");
console.log(sym1 === sym2); // false,每次调用 Symbol() 都返回新的唯一符号

全局共享符号:
使用 Symbol.for("key") 可在全局注册表中查找或创建同一字符串对应的同一个符号。

常用内置符号:
Symbol.iteratorSymbol.toStringTagSymbol.species 等,用于元编程,定制对象的内置行为。

基本类型总结

  • 不可变性:基本类型的值一旦创建就无法改变,所有操作都会产生新值。
  • 按值比较:基本类型比较时直接比较值(===),而非引用。
  • 包装对象:当对基本类型调用方法时,JS 会临时创建一个对应的包装对象(String、Number 等),用完即销毁,体现了“自动装箱”机制。

理解这些基本类型是深入学习类型转换、内存管理以及后续复杂数据结构的基础。下一节我们将继续探讨引用类型 Object,以及两种类型之间的关键差异。