深浅拷贝的理解

其实深浅拷贝也就是深浅复制,个人理解就是基于在存储位置的基础上。
1.浅拷贝
简而言之就是简单的去复制数组和对象的地址,只是复制的地址,其实它们所指向的还是同一个存储空间,如果存储空间里的内容发生了改变,它们彼此之间都会有影响。
举个简单的例子:

let arr1 = [1,2,3,4,5];    //这就是浅拷贝
let arr2 = arr1;  //只是简单的复制了存储在栈里的指针,arr2和arr1中存储的是相同的 数组的内存地址
//如果此时通过arr2修改数组的内存地址里的内容
arr2[0]='我变了';
console.log(arr1);  //这时arr1指向的内容也是被修改后的内容

2.深拷贝
就是完完整整的复制其他数组和对象所指向的内存地址里的内容,这样就是两个完全独立的、互不影响的两个变量对应着各自的存储空间
例如:

let arr1 = [1,2,3,4,5];
let arr2 = [];
//遍历arr1所对应的存储空间的内容
arr1.forEach(function(item){
	//将arr1中存储空间里的内容复制添加到arr2中
    arr2.push(item);
});
arr2[0] = '我变了';  //不会影响arr1中的内容

console.log(arr1);  //[1,2,3,4,5];
console.log(arr2);  //['我变了',2,3,4,5];

注:如果是复杂的像是多维数组等,就不能是简单的拷贝数组的地址,原生js中而是要用递归的方式来解决。

其实在jQuery中有专门的方法来实现:

//$.extend() :将对象2,对象3...之后的数据类型复制到对象1中。
浅拷贝:$.extend()( 是否深拷贝(不写) ,  对象1,对象2,对象3...)
深拷贝: $.extend()( 是否深拷贝(true) ,  对象1,对象2,对象3...) 
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值