首先为什么会有这三个概念:
》》》》专业说法:数组是引用类型,常规的复制复制的是引用
》》》》白话说法:因为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
));//深拷贝