JavaScript基本数据类型共7种:String、Number、Boolean、undefined、null、Symbol、BigInt;它们值不可变、按值访问、直接存储在栈内存中,赋值时拷贝值而非地址。

JavaScript 中基本数据类型直接存值,全部放在栈内存里,不涉及地址引用,这是它和引用类型最核心的区分点。
基本数据类型有哪些
共 7 种:String、Number、Boolean、undefined、null、Symbol、BigInt。它们都满足两个关键特征:值不可变、按值访问。
- String 虽然能用索引读取字符,但修改会生成新字符串,原值不变
- Number 中的 NaN 和 Infinity 也是具体值,不是对象,typeof 返回 "number"
- null 是原始类型,尽管 typeof null 返回 "object"(历史遗留 bug)
- Symbol 和 BigInt 是 ES6/ES10 新增,同样走栈存储,比如
let id = Symbol('user')的值就完整存在栈中
栈内存中怎么存值
每个基本类型变量在栈中占据一块固定大小的空间,值本身被完整写入。例如:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
let a = 42→ 栈中分配空间,直接写入二进制表示的 42 -
let b = a→ 把 a 所在位置的值复制一份,放到 b 对应的栈位置,a 和 b 完全独立 -
b = 99→ 只改 b 栈位置的值,a 不受影响
怎么和引用类型明确区分开
关键看赋值和比较行为:
立即学习“Java免费学习笔记(深入)”;
- 赋值时是否产生新副本:基本类型赋值是“拷贝值”,引用类型赋值是“拷贝地址”
- 相等判断是否看内容:两个相同字符串
"hi" === "hi"为 true;但两个相同结构的对象{x:1} === {x:1}为 false,因为栈中地址不同 - typeof 判断:基本类型都能被准确识别(除了 null),而所有引用类型 typeof 都返回 "object"(函数例外,返回 "function")
为什么设计成这样
栈内存访问快、管理简单,适合小而固定的值。基本类型体积可控(比如 Number 固定 64 位浮点)、使用高频,放栈里能提升执行效率。而像对象、数组这种大小不定、结构复杂的数据,必须交给堆来管理,栈只留个指针——这个分工决定了 JS 类型行为的根本逻辑。

















