浅拷贝和深拷贝有什么区别?
assign合并对象 的结果是什么?他是一个数组还是什么东西来的,看到案例中把所有的对象合并了之后结果也没有用逗号分隔什么也没有。。
正在回答
同学你好,关于同学的疑问解答如下:
1、Object.assign方法是将源对象的所有可枚举属性,复制到目标对象,比如:
Object.assign方法的第一个参数是目标对象,后面的参数都是源对象,由上述例子得出,合并对象后还是对象。
2、值得注意的是:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性,比如:
3、Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用,比如:
上面代码中,源对象obj1的a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面。
4、深拷贝和浅拷贝的区别:
(1)浅拷贝:浅拷贝的时候,创建一个新的对象,这个对象中存放着原对象精准的值,如果对象是基本数据类型,拷贝的就是基本类型的值,如果对象是引用数据类型,拷贝的则是这个对象所指向的一个指针,如果其中一个对象的引用数据类型改变了值,那么会影响另外一个的值,简单来说就是,只拷贝第一层中的值,但是对象中的子对象不会,两者就会有相同的引用。
数组中:可以实现浅拷贝的方法:扩展运算符,concat,slice
对象中:可以实现浅拷贝的方法:Object.assign()
(2)深拷贝:深拷贝的时候,创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”,两者之间改变互不影响,简单来说深拷贝就是不仅拷贝了值,也将值对应的地址也复制过来,形成一个全新的内容,即使改变原对象的内容,也不会影响另一个。
希望可以帮到你!
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星