理解javascript中浅拷贝和深拷贝

首先,我们要知道javascript的数据类型。

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

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

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

理解javascript中浅拷贝和深拷贝_第1张图片

如图所示:

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)。

理解javascript中浅拷贝和深拷贝_第2张图片

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

理解javascript中浅拷贝和深拷贝_第3张图片

理解javascript中浅拷贝和深拷贝_第4张图片

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

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

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

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

理解javascript中浅拷贝和深拷贝_第5张图片

理解javascript中浅拷贝和深拷贝_第6张图片

理解javascript中浅拷贝和深拷贝_第7张图片

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

理解javascript中浅拷贝和深拷贝_第8张图片

总结:

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

深拷贝:复制并创建一个一模一样的对象,不共享内存,修改新对象,旧对象保持不变;实现深拷贝主要有两种方法:

(1):递归;

(2):JSON.stringify结合JSON.parse。

学习于公众号《网页前端开发学习》

 

 

你可能感兴趣的:(理解javascript中浅拷贝和深拷贝)