比较好的理解连接:https://segmentfault.com/a/1190000018947028
- slice
let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
let brr=arr.slice(0,4)
brr[0].name=2
console.log(arr,brr);//数组的第一个均改变
说明复制出来的是相同的数组地址
- concat
let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
let brr=arr.concat()
brr[0].name=2
console.log(arr,brr);//数组的第一个均改变
说明复制出来的是相同的数组地址
- for循环方式方式 ,包括map循环,while循环
let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
// let brr=arr.slice(0,4)
// let brr=arr.concat()
let brr=[];
for (var i = 0; i < arr.length; ++i) {
brr.push(arr[i]);
}
brr[0].name=2
console.log(arr,brr);//数组的第一个均改变
说明复制出来的是相同的数组地址
- 深度拷贝
let arr = [{name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}, {name:'0'}];
// let brr=arr.slice(0,4)
// let brr=arr.concat()
let brr=[];
brr=JSON.parse(JSON.stringify(arr))
brr[0].name=2
console.log(arr,brr);//原数组未改变
说明复制出来的是不同数组
关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑://www.greatytc.com/p/b084dfaad501
深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝:
https://blog.csdn.net/flyingpig2016/article/details/52895620?utm_source=app