js深拷贝和浅拷贝

(例题讲解)
var a = { name: “lucy” };
var b = a;
b.name = “lily”;
b.age = 20;
console.log(a);
console.log(b);
此时浏览器控制台输出应为:

为什么此时 a 和 b 输出结果一样呢?
实际上将对象赋值给 a ,是将对象的地址赋值给 a,根据这个这个地址我们可以找到这个对象,
将 a 赋值给 b ,实际上是将 a 中保存的内存地址,复制一份给 b ,此时我们可以知道:a ,b指向 的是同一个对象,根据 b 的地址找到的对象,并修改对象,对象改变,所以,此时 a , b,指向的都是这个已经被修改过的对象,此解释涉及【深拷贝】,【浅拷贝】,说到【拷贝】,又得扯到【内存】。
内存:
内存分为**【栈内存】和【堆内存】**
1.只要我们声明一个变量,就会在【栈】中占一个内存,,基本数据类型的【VAR】在【栈】中,直接提供给变量;
2.引用类型的数值,数据与基本数据类型不同,它是存在【堆】中,与此同时提供给【栈】一个地址,指向的是【堆】中的数据;
注意:【栈】中的变量,如果有多个【变量】指向同一个地址,获取到的是【同一个堆内存中数据】,任何一个变量发生变化时都会影响到【其他的变量】;
拷贝:
拷贝分为:【深拷贝】 【浅拷贝】
1.1 深拷贝:(抄袭者):当【抄袭者】数据改变时,不会改变【被抄袭者】中的内容,同时,当【被抄袭者】中的数据发生改变时,亦不会影响到【抄袭者】中数据,说明【抄袭者】可以自食其力。
1.2深拷贝:拷贝的是数据,JS中基本数据类型都是【深拷贝】,因为基本数据类型都存在【栈中】
2.1浅拷贝:拷贝后,【抄袭者】和【被抄袭者】相互影响
2.2浅拷贝:拷贝的是指针,JS中引用数据类型都是浅拷贝,因为引用类型都存在【堆中】
而我们之前所介绍的题目就属于【浅拷贝】,所以才会导致【a】和【b】在控制台输出的结果一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值