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

JavaScript中的变量混淆:为何c[2]=b[0]会使a[2]值改变?

为什么修改数组c会影响数组a?

这是JavaScript里非常常见的引用类型认知误区,我给你一步步讲明白:

首先得搞懂JavaScript里两种数据类型的赋值逻辑:

  • 原始类型(数字、字符串、布尔值等):赋值的时候是直接复制「值本身」,相当于复制了一份一模一样的副本,两个变量互不干扰。
  • 引用类型(数组、对象、函数等):赋值的时候复制的不是「值本身」,而是这个值在内存里的「地址引用」。也就是说,var c = a执行后,a和c其实指向的是内存中同一个数组对象,它们就像同一个房间的两把钥匙,不管用哪把钥匙进去改东西,另一把打开看到的都是修改后的房间。

举个实际代码例子你就懂了:

// 定义数组a
var a = [1, 2, 3];
// 把a赋值给c,此时c和a指向同一个内存地址的数组
var c = a;
// 修改c的第3个元素(假设b[0]是某个具体值,比如4)
c[2] = b[0];
// 此时a的第3个元素也变了,因为a和c共享同一个数组
console.log(a[2]); // 会输出和b[0]一致的值

那如果想让c成为a的独立副本,修改c不影响a,该怎么做?可以用这些方法创建数组的浅拷贝:

  • 使用slice()方法:var c = a.slice();
  • 使用扩展运算符:var c = [...a];
  • 使用Array.from():var c = Array.from(a);

这样操作后,c就会是一个全新的数组,和a指向不同的内存地址,两者的修改就不会互相影响啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:48:38