json和对象的区别_理解JavaScript中浅拷贝和深拷贝的区别

96b0c7959e6b83bbd07f2f94fb1be5b9.png

后台回复【福利】限时领取JS零基础入门课程

浅拷贝和深拷贝是什么意思?今天就来带大家聊聊这个既简单又复杂的问题。

3ef0e644c1f7480b1c6be5daa1418572.png

要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型

JavaScript有两种数据类型,基础数据类型和引用数据类型

基础数据类型:保存在栈内存中的简单数据段 ,有undefined,boolean,number,string,null

引用数据类型:Array,对象,Function  保存在堆内存空间中

a4103ac9fa417fd6925bcbf681cd1fa4.png

如图所示:

a1 = 0;a2 = 'this is str';a3 = null 存放在栈内存中

var c =[1,2,3] 与 var d = {m:20} 变量名与内存地址存储在栈内存中,[1,2,3]与{m:20} 作为对象存储在堆内存中

基础数据类型的复制(如var a = 20   var b = a)

0cefb08d514b64ac5afd86ec44714731.png

引用数据类型的复制 ( var m ={a:10, b:20} var n = m)

271f1c7dd057ae4901bc9586d4dd5da1.png

m与n指向同一个内存空间,当m或者n改变时,另一个也跟着改变

如m.a = 80  ;  console.log(n.a)   // 80

怎么样使引用数据类型有各自独立的内存空间

一、采用递归的方法复制拷贝对象

2c58614681648bcaf4235f54cf1a5ef8.png

5509b032158a21539d66754e9379653e.png

fd471a990ede85142dbb4f8978590767.png

二、用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象。

371fc867256ea84109d7fc4a0e6c14de.png

总结:

浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;  

深拷贝(deep copy):复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变;

实现深拷贝主要有2种方法:

(1)递归

(2)JSON.stringify结合JSON.parse

75f001f4e0462146bf6c11289a23648d.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值