You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中值与引用的区别:为何修改num1后num2仍为5?

为什么修改num1后num2的值不变化?

这确实和JavaScript的数据类型有关,核心原因是基本数据类型的赋值是值拷贝。

JavaScript的数据类型分为两类:

  • 基本数据类型:包括数字、字符串、布尔值、null、undefined、Symbol、BigInt
  • 引用数据类型:对象(包括数组、函数等)

当你操作基本数据类型时,变量存储的是值本身。执行赋值操作时,会直接复制一份值的副本给新变量,两个变量拥有独立的内存空间,后续修改其中一个变量的值,不会影响另一个。

结合你的代码具体分析:

  1. let num1 = 5;:num1存储的是基本数据类型数字5
  2. let num2 = num1;:JavaScript复制了num1中的5,把这个副本存到num2的内存空间里,此时num1和num2各自持有独立的5
  3. num1 = 8:这行代码只是修改了num1存储的值,和num2里的副本没有关联,所以console.log(num2)输出的还是最初拷贝的5

如果是引用数据类型,赋值逻辑就完全不同:

let obj1 = { num: 5 };
let obj2 = obj1;
obj1.num = 8;
console.log(obj2.num); // 输出8

因为引用类型的变量存储的是指向内存中对象的地址,赋值时拷贝的是这个地址,两个变量指向同一个对象。修改对象的属性时,所有指向该对象的变量都会看到变化。

内容的提问来源于stack exchange,提问作者Jparker1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:42:04