zxdfe / FE-Interview

Every step counts
34 stars 1 forks source link

第6题:什么是浅拷贝,什么是深拷贝? #6

Open zxdfe opened 1 year ago

huangguanwolan99 commented 1 year ago

等我学完我再来,等着

kevincy0122 commented 1 year ago

666

rupoly commented 1 year ago

浅拷贝:使用特定的方法,只拷贝指向对象的指针,而不复制对象本身 深拷贝:直接复制对象本身,在内存中开启完全不同的堆空间,与原对象互不影响

Moooodena commented 1 year ago

浅拷贝:拷贝第一层的基本类型的值和引用类型的地址;改变第一层基本数据类型,不影响原数据; 常见浅拷贝方法:Object.assign( ); 扩展运算符;Array.prototype.concat( );Array.prototype.slice( );

深拷贝:在堆内存会开辟一个新的空间来存在新的对象,拷贝原对象的所有属性,对对象的子对象进行递归拷贝;新旧对象相互独立,互不影响; 常见深拷贝方法:lodash库;手写递归方法(for in 方法遍历对象);JSON.parse(JSON.stringify( ))此方法有缺点,如果拷贝的对象里有函数,undefined,symbol,用JSON.stringify( )序列化后,其键值对会丢失,拷贝正则时会变成空对象,对象里有NaN,Infinity会变成null,拷贝Date会变成字符串;

xiaoyan-yan commented 1 year ago

我还没学到精华,等我,马上来!

BlueSky-Engineer commented 1 year ago

深拷贝: 深拷贝,在堆内存中开辟一个新的空间,存新的对象 递归的拷贝源对象的所有属性和方法,拷贝前后的两个对象 互不影响 浅拷贝: 浅拷贝,在堆内存中,新开辟一个内存空间,创建一个新对象 拷贝源对象的第一层基本数据类型的值和引用类型的地址

DengZhaoQuan commented 1 year ago
z-forever-y commented 1 year ago
浅拷贝:在堆内存中重新开辟一个空间,创建一个新的对象,拷贝原对象的第一层基本类型数据的值和引用类型的地址。
实现浅拷贝的方式:
1.Object.assign()
2.扩展运算符
3.数组的concat()
4.数组的slice()

深拷贝:在堆内存中新开辟一个空间,存新的对象,递归的拷贝原对象的所有属性和方法,拷贝前后的两个对象,相互不影响
dyxfe commented 1 year ago
1、深拷贝:在堆内存空间中创建一个新的空间存放新的对象,递归拷贝原对象的所有属性和方法,拷贝前后的对象互不影响
实现深拷贝
1、手写
2、lodash库
3、JSON
----------------------------------------------------------
2、浅拷贝:在堆内存空间中新开辟一个空间存放新的对象,只拷贝原对象的第一层,如果是基本数据类型,拷贝前后互不影响
如果是引用类型,拷贝前后会有影响
实现浅拷贝
1、Object.assgin()
2、扩展运算符 ....
3、数组 concat方法
4、数组slice方法
WLNCJL commented 1 year ago
浅拷贝:在内存中新开辟一个空间存拷贝过后的对象,只拷贝对象的第一层,如果第一层是基本数据类型拷贝值,如果第一层是引用类型拷贝地址
方法:Object.assign / 扩展运算符 / arr.concat / arr.slice
深拷贝:在内存中新开辟一个空间存拷贝过后的对象,递归遍历对象,拷贝前后的对象互不影响
方法:递归函数 / lodash库 / JSON.parse(JSON.stringify)
Cremei commented 1 year ago
概念
浅拷贝 拷贝原对象的第一层,即基本数据类型的值 和 引用类型的地址;拷贝栈内存中的值和地址。
实现方式
1.Object.assign() let newObj = Object.assign({}, obj)
2.扩展运算符 spread ... let newObj = {...obj}
3.Array.prototype.concat() const newArr = arr.concat()
4.Array.prototype.slice() const newArr = arr.slice()
深拷贝 在堆内存中开辟新的空间,创建新对象,拷贝前后对象互不影响
实现方式
手写递归
JSON.parse(JSON.stringify()) ==> 缺陷?
lodash库 const newObj = _.cloneDeep(obj)