Javascript中的深拷贝与浅拷贝

本文详细解释了JavaScript中的深拷贝与浅拷贝的概念及其实现方式。浅拷贝仅复制对象的第一层引用,而深拷贝则完整复制对象的所有层级,确保两个对象间完全独立。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

javascript中的深拷贝与浅拷贝

什么是浅拷贝?什么是深拷贝?

1.浅拷贝:浅拷贝是拷贝引用,拷贝后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响。

//这里的赋值仅仅只是把obj1的内存地址指向了obj。
var obj={name:'zhangsan',age:24}
var obj1=obj;
console.log(obj1.name);//zhangsan

//改变obj1中name的值,obj中name的值也跟着发生改变
obj1.name='lisi';
console.log(obj.name)//lisi
consloe.log(obj1.mane)//lisi

像上面这种直接赋值的方式就是浅拷贝,此时会发现,obj1的值发生改变,原来的obj也会跟着发生改变。但是很多情况下我们想要的不是这种情况,仅仅只是把原对象的值拷贝过来当改变obj1时,obj并不需要跟着改变。此时,就需要用到了深拷贝。

2.深拷贝:在堆中重新分配内存,并且把源对象所有属性都进行新建拷贝,以保证深拷贝的对象的引用图不包含任何原有对象或对象图上的任何对象,拷贝后的对象与原来的对象是完全隔离,互不影响。

//深拷贝就是不紧复制对象的基本类,同时也复制原对象中的对象.
//就是说完全是新对象产生的,新对象所指向的不是原来对像的地址。


function deepCopy(a, b) {
  var b = b || {};
  for (var i in a) {
    if (typeof a[i] === 'object') {
      b[i] = (a[i].constructor === Array) ? [] : {};
      deepCopy(a[i], b[i]);
    } else {
       b[i] = a[i];
    }
  }
  return b;
}

var arr =['zhangsan','lisi','wangwu'];
var newArr=deepCopy(arr,newArr);

console.log(arr[1]);//lisi
console.log(newArr[1]);//lisi

newArr[1]='zhaoliu';
console.log(arr[1]);//lisi
console.log(newArr[1]);//zhaoliu 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值