javascript有七种原始类型:string、number、boolean、undefined、null、symbol和bigint;它们不可变、按值传递、直接存于栈内存,是语言最底层的值单元,非对象,无自有方法,仅通过自动装箱临时调用方法。

JavaScript 中原始类型是语言最底层的值单元,它们不是对象,也不具备方法或属性(尽管字符串等能调用方法,那只是临时包装),核心特点是不可变、按值传递、直接存于栈内存。
原始类型有哪些
共七种:string、number、boolean、undefined、null、symbol、bigint。它们覆盖了几乎所有基础值表达需求:
-
string 表示文本,如
'hello'或`模板${value}` -
number 统一为双精度浮点数,支持整数、小数、
Infinity、-Infinity和NaN -
boolean 只有
true和false,用于逻辑判断 - undefined 表示“未定义”,常见于声明未赋值变量、函数无返回、对象无该属性
-
null 表示“有意为空”,是开发者主动赋的空值,语义上比
undefined更明确 -
symbol 每次调用
Symbol()都生成唯一值,主要用于对象属性键防冲突 -
bigint 以
n结尾(如123n),可安全表示超过2⁵³−1的整数,不与 number 混合运算
为什么必须理解“不可变”和“按值传递”
这是原始类型行为的根本依据:
- 字符串方法如
'abc'.toUpperCase()返回新字符串,原值不变 - 数字运算如
let a = 5; a + 1不修改a,而是产生新值 - 赋值或传参时复制的是值本身,两个变量互不影响:
let x = 10; let y = x; y = 20;不会影响x - 这与 object 的引用传递形成鲜明对比——改一个引用对象的属性,所有指向它的变量都会看到变化
如何准确判断原始类型
typeof 是首选,但要注意陷阱:
-
typeof 'a'→'string',typeof 42→'number',typeof true→'boolean' -
typeof undefined→'undefined',但typeof null→'object'(历史 Bug,检测必须用value === null) -
typeof Symbol()→'symbol',typeof 123n→'bigint' - 需要统一精确识别时,可用
Object.prototype.toString.call(value),它返回类似[object String]的字符串
原始类型在实际开发中的作用
它们是构建一切的基础支撑:
- 作为函数参数和返回值,保证调用方不会意外被修改
- 构成对象属性的键(string、symbol、number、boolean、bigint 都可作键,但 null/undefined 不行)
- 参与相等比较:
===直接比值,无需深遍历 - 影响内存管理:栈中快速分配释放,引擎可做缓存优化(如小整数复用)
- 是类型系统起点,TypeScript 的基础类型、JSON 序列化限制都源于此
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











