首页 > 其他分享 >Object.assign()之浅拷贝解析

Object.assign()之浅拷贝解析

时间:2022-12-10 15:47:43浏览次数:42  
标签:对象 originalObject Object copiedObject 拷贝 assign

1.做前端开发时遇到一个对象拷贝的问题,当时我把需要拷贝的对象使用Object.assign方法复制了一份,但是再对拷贝出来的对象处理后出现一些问题,如下:
const originalObject = {
name: 'John',
age: 30,
type:{
fru:"我的原始对象"
}
};
//拷贝的对象
const copiedObject = Object.assign({}, originalObject);
copiedObject.name="Jack"
copiedObject.type.fru="复制的对象"
console.log(copiedObject,originalObject)//
上面的打印出来的复制对象与原始对象有点不一样,原始对象name复制成功,type却随着复制对象的改变而发生了改变
2.原因说明
查过资料得知:assign拷贝复制对象的时候,对于简单的数据类型(num,string)等是深拷贝,而对于对象里的引用数据类型是浅拷贝,所以本质上Object.assign是浅拷贝,后来用了深拷贝方法Json.Parse解决;
const originalObject = {
name: 'John',
age: 30,
type:{
fru:"我的原始对象"
}
};

const copiedObject = JSON.parse(JSON.stringify(originalObject));
copiedObject.name="Jack"
copiedObject.type.fru="复制的对象"
console.log(copiedObject,originalObject)//两个对象互相不影响

标签:对象,originalObject,Object,copiedObject,拷贝,assign
From: https://www.cnblogs.com/pth2022/p/16971665.html

相关文章

  • ubuntu linux pip安装报错 TypeError: expected string or bytes-like object
     File"/usr/share/python-wheels/packaging-17.1-py2.py3-none-any.whl/packaging/specifiers.py",line703,incontains  item=parse(item) File"/usr/shar......
  • 解决报错:AttributeError: ‘TestReport‘ object has no attribute ‘description‘
    此时我们只需要在conftest文件下加如下钩子函数就可以完美解决:@pytest.mark.hookwrapperdefpytest_runtest_makereport(item,call):outcome=yieldreport=......
  • 23. 深浅拷贝
    概念浅拷贝:只拷贝最外面一层的数据;更深层次的对象,只拷贝引用。深拷贝:拷贝多层数据;每一层级别的数据都会拷贝。总结:拷贝引用的时候,是属于传址,而非传值。深拷贝会......
  • 27. Object.defineProperty
    vue2数据驱动,双向绑定原理,Object.definePropertyObject.defineproperty是ES5的一个函数,为对象添加属性语法:Object.defineProperty(目标对象,属性名,{属性修饰符})......
  • 彻底理解Python中浅拷贝和深拷贝的区别
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • JavaScript:对象:如何复制一个对象?浅拷贝与深拷贝
    回顾一下,我们对传参的讨论,对象的传参是引用传递,我们传递的是对象数据所在的内存地址;那么无论我们怎么去赋值,所有变量指向的都是同一块内存;如上图所示,无论我去使用哪个变......
  • python浅拷贝和深拷贝
    python浅拷贝和深拷贝python中对对象直接赋值其实只是将其换了一个名字,想要对对象进行真正的复制要通过别的方法。浅拷贝浅拷贝利用copy()函数就可以实现,它会产生新的对......
  • Objective-C #define 用法
    在C语言中,预处理代码(Preprocessor)是非常强大的工具,能让你的代码变得更加易读和易改。利用预处理代码,你可以重新定义代码的一部分,使得你的代码更适合你的风格。预处理......
  • OC之【深拷贝(mutableCopy)和浅拷贝(copy)】
    文件#import<Foundation/Foundation.h>#import"Student.h"#import"GoodStudent.h"//copy语法的目的:改变副本的时候,不会影响到源对象字符串的拷贝(深拷贝)//深拷贝:内容......
  • OC之【NSObject使用】
    main.m文件#import<Foundation/Foundation.h>#import"Student.h"#import"Person.h"常用方法voidStudent*stu=[[[Studentalloc]init]autorelease];//isKin......