JavaScript中值与引用的区别:为何修改num1后num2仍为5?
为什么修改num1后num2的值不变化?
这确实和JavaScript的数据类型有关,核心原因是基本数据类型的赋值是值拷贝。
JavaScript的数据类型分为两类:
- 基本数据类型:包括数字、字符串、布尔值、null、undefined、Symbol、BigInt
- 引用数据类型:对象(包括数组、函数等)
当你操作基本数据类型时,变量存储的是值本身。执行赋值操作时,会直接复制一份值的副本给新变量,两个变量拥有独立的内存空间,后续修改其中一个变量的值,不会影响另一个。
结合你的代码具体分析:
let num1 = 5;:num1存储的是基本数据类型数字5let num2 = num1;:JavaScript复制了num1中的5,把这个副本存到num2的内存空间里,此时num1和num2各自持有独立的5num1 = 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
相关产品推荐
相关产品推荐

