浅拷贝和深拷贝有什么区别?

浅拷贝和深拷贝有什么区别?

assign合并对象 的结果是什么?他是一个数组还是什么东西来的,看到案例中把所有的对象合并了之后结果也没有用逗号分隔什么也没有。。 

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,关于同学的疑问解答如下:

1、Object.assign方法是将源对象的所有可枚举属性,复制到目标对象,比如:

http://img1.sycdn.imooc.com//climg/5f7d78e609649b4f07750266.jpg

Object.assign方法的第一个参数是目标对象,后面的参数都是源对象,由上述例子得出,合并对象后还是对象。

2、值得注意的是:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性,比如:

http://img1.sycdn.imooc.com//climg/5f7d78b5092e0a8607810261.jpg

3、Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用,比如:

http://img1.sycdn.imooc.com//climg/5f7d7991090147f707280224.jpg

上面代码中,源对象obj1的a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面。

4、深拷贝和浅拷贝的区别:

(1)浅拷贝:浅拷贝的时候,创建一个新的对象,这个对象中存放着原对象精准的值,如果对象是基本数据类型,拷贝的就是基本类型的值,如果对象是引用数据类型,拷贝的则是这个对象所指向的一个指针,如果其中一个对象的引用数据类型改变了值,那么会影响另外一个的值,简单来说就是,只拷贝第一层中的值,但是对象中的子对象不会,两者就会有相同的引用。

数组中:可以实现浅拷贝的方法:扩展运算符,concat,slice
对象中:可以实现浅拷贝的方法:Object.assign()

(2)深拷贝:深拷贝的时候,创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”,两者之间改变互不影响,简单来说深拷贝就是不仅拷贝了值,也将值对应的地址也复制过来,形成一个全新的内容,即使改变原对象的内容,也不会影响另一个。

希望可以帮到你!

  • 陈立天 提问者 #1
    那要如何才能够进行深拷贝?
    2020-10-08 08:36:39
  • 陈立天 提问者 #2
    浅拷贝是基本数据类型的话 其中一个对象的值发生改变了 会不会影响到另外一个呢?
    2020-10-08 08:37:49
  • 卡布琦诺 回复 提问者 陈立天 #3
    1、基本类型是按值访问的,从一个变量复制基本类型的值到另一个变量后这两个变量的值是完全独立的,即使一个变量改变了也不会影响到另一个变量。2、最简单的深拷贝是使用JSON.stringify() 和JSON.parse(),就是先把对象使用JSON.stringify()转为字符串,再赋值给另外一个变量,然后使用JSON.parse()转回来,比如:<script> let object1 = { a: 1, b: 2, c: 3 }; let object2 = JSON.parse(JSON.stringify(object1)); object2.a = 11; console.log(object1, object2);//Object { a: 1, b: 2, c: 3 } Object { a: 11, b: 2, c: 3 } </script>,祝学习愉快!
    2020-10-08 10:05:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师