JavaScript有七种原始数据类型:String、Number、Boolean、Undefined、Null、Symbol和BigInt,它们不可变、按值传递,是语言中最基础的值类型。

JavaScript 中有七种原始(primitive)数据类型,它们是语言中最基础、不可再分的值类型。这些类型在内存中直接存储具体值,而非引用,因此在比较和赋值时表现一致、高效。
1. String(字符串)
表示由零个或多个16位Unicode字符组成的有序序列,用单引号、双引号或反引号定义。字符串是不可变的——任何“修改”操作(如 toUpperCase()、slice())都返回新字符串,原值不变。
- 空字符串 '' 是合法的 String 类型
- 模板字面量(反引号)支持多行和插值:`Hello ${name}`
- 注意:数字字符串(如 '123')仍是 String,不是 Number
2. Number(数字)
表示双精度64位浮点数,涵盖整数、小数、正负数、零、无穷大(Infinity)和非数字(NaN)。JavaScript 没有单独的整型或浮点型,所有数字统一为 Number 类型。
- 0 和 -0 在大多数场景下相等,但可通过 Object.is(0, -0) 区分
- NaN 是唯一不等于自身的值:NaN === NaN 返回 false
- 大整数可使用 BigInt(后缀 n),但它属于第八种类型(ES2020新增),不属于原始七种之一
3. Boolean(布尔值)
仅有两个字面值:true 和 false。常用于条件判断与逻辑运算。注意它与字符串 'true'/'false' 或数字 1/0 完全不同。
立即学习“Java免费学习笔记(深入)”;
- 所有原始类型都有对应的“假值”(falsy):只有 false、0、-0、0n、''、null、undefined、NaN
- Boolean(0) → false,Boolean('0') → true(非空字符串为真)
4. Undefined(未定义)
表示变量已被声明但尚未赋值,或对象属性不存在,或函数无显式返回值时的默认返回值。它是全局对象的一个属性(window.undefined),但不应被重写。
- let x; → x 的值为 undefined
- typeof undefined 返回 'undefined'
- 与 null 不同:它是“未初始化”的状态,而 null 是有意赋的“空值”
5. Null(空值)
表示一个空对象引用,即“此处本应有对象,但现在什么也没有”。它是开发者主动赋值的字面量,类型为 'object'(这是历史遗留 bug,但已标准化,不会修复)。
- typeof null === 'object' 是 JavaScript 最著名的怪异行为之一
- 语义上,null 表示“无对象”,undefined 表示“未定义”
- 推荐用 === 判断:value === null,避免与 undefined 混淆
6. Symbol(符号)
ES6 引入的唯一性原始类型,用于创建独一无二的标识符,主要解决对象属性名冲突问题。每个 Symbol() 调用都返回一个新值,即使描述相同也不相等。
- Symbol('foo') !== Symbol('foo')(两者不相等)
- 可选描述(description)仅用于调试,不影响值本身
- 全局 Symbol 注册表:Symbol.for('key') 可跨模块复用同一 Symbol
7. BigInt(大整数)
ES2020 正式加入的第七种原始类型(注意:早期资料常称“六种”,因 BigInt 是后来补入的)。用于表示任意精度的整数,解决 Number 精度上限(2^53 - 1)问题。
- 字面量以 n 结尾:123n、0xFFn
- 不能与 Number 混合运算(如 1n + 2 报错),需显式转换
- typeof 123n 返回 'bigint'
这七种类型共同构成 JavaScript 值的基础。它们都不可变、按值传递、没有方法(但可通过包装对象临时调用方法,如 'abc'.length),且 typeof 运算符能准确识别其类型(除 null 外)。










