当前位置: 代码迷 >> 综合 >> js数组拷贝之浅拷贝-非严格深拷贝-深拷贝
  详细解决方案

js数组拷贝之浅拷贝-非严格深拷贝-深拷贝

热度:49   发布时间:2024-02-04 12:12:04.0

首先为什么会有这三个概念:

》》》》专业说法:数组是引用类型,常规的复制复制的是引用

》》》》白话说法:因为js数组的复制如果操作新数组会影响原数组,类似java引用类型操作

废话不多说看例子:

var arr1=["1","2","3"];

var arr2=[];

1、浅拷贝

arr2= arr1;

如果修改arr2,会导致arr1内容同步改变

2、非严格深拷贝 slice、concat

 arr2=arr1.slice(0);//concat自行研究效果一样

此时改变arr2,arr1内容不会改变,BUT

如果arr1是二维数组,或者arr1元素有对象,此时slice、concat得到arr2,操作arr2依然有问题

针对二维数组为例:只是复制了数组的第一维,二维仍然是引用,修改新数组的二维会影响原数组

var arr1=[["1","2","3"],"2","3"]

3、解决方案 用JSON转

arr2= JSON.parse(JSON.stringify(arr1));//深拷贝

  相关解决方案