JavaScript一个数组赋值给另一个数组

记录一次修复bug的经历

网页在更新迭代时,新版本在开发的时候莫名奇妙的会产生数据上的错误,期初还以为是cookie的储存过多导致的,因为出问题之处的新老版本代码完全一致,即在更新迭代时没有针对该处代码进行修改。

代码基本结构

这一js文件在最开始声明了多个const列表变量,然后在后面会多次引用这几个列表变量。

问题所在

新版本的网页在onload函数中加入了部分代码,这部分代码中包含了对几个const列表变量的引用,想法是新声明一个变量直接等于某个const列表变量,即声明副本,然后对副本进行修改,即只是想使用const变量中的值,修改的话只修改副本,不动原const变量。但是在JavaScript中,直接用将A列表的值用等号赋值给B列表,这就只是把B作为了A的引用,改变B会导致A也会被改变。
所以,在onload函数中加入对const列表变量的引用后,导致了原变量的改变,进而导致后面的代码的数据产生错误。

数组的深拷贝和浅拷贝。

内容引用自 https://blog.csdn.net/qq_33769914/article/details/100015740

浅拷贝,两个数组会相互影响

var array1 = [1];
var array2 = array1;
array2[1] = 2;
console.log(array1); // [1, 2]
console.log(array2); // [1, 2]

要改变array2的值而且不影响array1就要进行深拷贝,切断两个数组之间的关联。

// 1、使用扩展运算符...进行复制,需要es6语法的支持
var a = ['1','2','3']
var b = [...a];

b[3] = "4";
console.log(b); // ["1", "2", "3", "4"]
console.log(a); // ["1", "2", "3"]

// 2、使用concat或者slice
var arr1=[1];
var arr2 = arr1.concat([]); 
// 这种情况深拷贝以后,arr2 == arr1是true。也可以使用var arr4 = arr1.concat(); arr4也深拷贝了arr1.并且arr1 != arr4
// 不改变原来数组的情况下,拷贝出数组b ,且满足 b != a。使用concat()
// 或者是 var arr2 = [].concat(arr1); 
// 或者是 var arr2 = arr1.slice(); 
  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值