JavaScript基本数据类型共六种:String、Number、Boolean、undefined、null、Symbol,赋值时直接复制值到栈内存,互不影响;如num1=100后num2=num1,修改num2不影响num1。

基本数据类型在 JavaScript 中赋值时,是直接把值复制一份给新变量,两个变量互不影响。
哪些是基本数据类型
共六种:String、Number、Boolean、undefined、null、Symbol(ES6 新增)。它们的值都直接存放在栈内存中,不涉及地址引用。
- 例如:let a = 42; —— 数字 42 就真实存在栈里
- let b = "hello"; —— 字符串字面量也直接存栈(注意:字符串虽不可变,但仍是基本类型,传值行为一致)
- let c = true;、let d = null; 同理
赋值过程就是“复制值”
当你写 let x = y; 且 y 是基本类型时,JavaScript 会从 y 所在的栈位置读出原始值,再在另一个栈位置写入一份完全独立的副本。
- let num1 = 100;
- let num2 = num1; → 此时 num2 得到的是 100 的拷贝,不是指向 num1 的链接
- num2 = 200; → 只改 num2 栈里的值,num1 仍为 100
为什么字符串也属于值传递
虽然字符串可能很长,但 JS 引擎做了优化:它仍是基本类型,参数传递或变量赋值时逻辑上按值处理。即使内部可能复用内存,对外表现始终是“不可变+独立副本”。
- let s1 = "abc";
- let s2 = s1;
- s2 += "d"; → 实际创建新字符串 "abcd",s1 保持 "abc"
- 没有副作用,不共享状态
和引用类型的关键区别
基本类型赋值后,修改其中一个变量,绝不会影响另一个;而对象、数组等引用类型赋值的是堆内存地址,改属性就会同步反映。
- ✅ 基本类型:安全、隔离、可预测
- ❌ 不用担心浅拷贝问题——根本不需要拷贝,天生就是“深”的
- ⚠️ 注意:typeof null 返回 "object" 是历史遗留 bug,但 null 仍是基本类型,按值传递
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











