深拷贝与浅拷贝

浅拷贝请添加图片描述

浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存

实现

1.直接赋值

基本数据类型赋值过程都是浅拷贝的过程

2.Object.assign()
let a={};
let b={c:{d:1}};
Object.assign(a,b);
console.log(a); //{c:{d:1}}
//Object 注意事项
//1.它不会拷贝对象的继承属性
//2.它不会拷贝对象的不可枚举属性
//3.可以拷贝Symbol类型的属性
3.Array.prototype.concat()
4.Array.prototype.slice()
5.手动实现
function shallowCopy(object) {
  // 只拷贝对象
  if (!object || typeof object !== "object") return;

  // 根据 object 的类型判断是新建一个数组还是对象
  let newObject = Array.isArray(object) ? [] : {};

  // 遍历 object,并且判断是 object 的属性才拷贝
  for (let key in object) {
    if (object.hasOwnProperty(key)) {
      newObject[key] = object[key];
    }
  }

  return newObject;
}

深拷贝

请添加图片描述

深拷贝会创造一个一摸一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对对象

实现

1.JSON.parse(JSON.stringify())
2.手动实现
function deepCopy(object) {
  if (!object || typeof object !== "object") return object;

  let newObject = Array.isArray(object) ? [] : {};

  for (let key in object) {
    if (object.hasOwnProperty(key)) {
      newObject[key] = deepCopy(object[key]);
    }
  }

  return newObject;
}

浅拷贝与深拷贝的区别

总结:区别在于浅拷贝无论新旧数组哪个发生了变化,两者都会发生变化,因为两者都引用的同一个地址,也是在同一个地址上进行操作的;深拷贝正好与之相反

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值