深拷贝和浅拷贝

主要在于复制出来的新对象和原来的对象是否会互相影响,改一个另一个也会变

浅拷贝:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅拷贝出来的对象也会相应的改变(新旧对象共享内存,修改一个,另一个也会受到影响)

深拷贝:在内存开辟一块新的地址(堆内存中)用于存放复制的对象

  • 浅拷贝例子:

一瓶饮料,开始插入了一根吸管,然后浅拷贝一下,又插入了一根吸管,所以当一根吸管喝饮料时另一根吸管也会受到到影响

  • 深拷贝例子:

一瓶饮料一根吸管,深拷贝一下,就是重新开一瓶饮料(重新开辟一块地址)用于存放所复制对象

不管两根吸管怎么使用,对彼此都没有影响

  • 浅拷贝:

当改变obj1的属性值是 obj会因为obj1的改变而改变

var obj = {name:"jiyifei",age:18}
    var obj1=obj
    console.log(obj1); //name:'jiyifei',age:18
    obj1.age=22
    console.log(obj) //name:'jiyifei',age:22
    console.log(obj1);//name:'jiyifei',age22

Object.assign()也是浅拷贝的操作

var obj = {name:"jiyifei",age:18}
    var obj1=Object.assign(obj)
    obj1.age=22
    console.log(obj) //age:22
    console.log(obj1);//age:22
  • 深拷贝的例子

通过JSON对象实现深拷贝

JSON.stringify:将js的值(对象或者数组)转为JSON字符串

JSON.parse:用来解析JSON字符串,将字符串转化为Object类型

var obj = {name:'张三',age:18}
    var obj1 = JSON.parse(JSON.stringify(obj))
    obj1.age=22
    console.log(obj); //age:18
    console.log(obj1);//age:22

使用扩展运算符进行深拷贝

 var obj = {name:'张三',age:18}
    var obj1 = {...obj,age:20}
    console.log(obj); //age:18
    console.log(obj1);//age:20
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值