美文网首页
js 中深浅拷贝的区别和实现

js 中深浅拷贝的区别和实现

作者: GBKWE | 来源:发表于2020-04-15 16:20 被阅读0次

    在js中经常会遇到js的深浅拷贝问题,在项目中经常会遇到,所以有必要搞清楚。下面先看一个例子。

    浅拷贝

    通过Object.assign拷贝a,修改a.num的值,b.num 没有改变。修改a.deep.count的值,b.deep.count也改变了,num 和 deep有什么区别吗? num 是基本数据类型,deep是一个对象。js中有五种基本数据类型number,string,boolean,null,undefined,他们的值被以键值对的形式保存在栈中。引用类型包括数组,函数,对象等。

    对于基本数据类型栈内存会新开辟一个内存,所以上面a.num 和 b.num是相互独立的,修改不会互相影响。对于引用数据类型,复制的是a的引用地址,而并非堆里面的值,所以上面a.deep.count和b.deep.conut 相互影响。

        深拷贝 

    b中 num 和deep中的值和a中的是相互独立,互不影响。如果把  b.deep 换成 数组 deep:[1, 2, 3],或者换成 function{ console.log(this.num)} ,经过测试也是正常的。

    相关文章

      网友评论

          本文标题:js 中深浅拷贝的区别和实现

          本文链接:https://www.haomeiwen.com/subject/vuecvhtx.html