前端面试经常问到的浅拷贝和深拷贝

深拷贝与浅拷贝详解
本文详细解析了深拷贝与浅拷贝的概念,阐述了两者在处理基本数据类型与对象时的区别,并提供了多种实现拷贝的方法,包括自定义函数、ES6语法、JSON方法及第三方库lodash的使用。

1.深拷贝、浅拷贝定义概述

浅拷贝的时候如果目标是基本数据类型,就如同直接赋值那种,会拷贝其本身,如果目标是对象,那么对于浅拷贝而言就只能拷贝其引用,原对象改变,拷贝对象也会随之改变;
但是深拷贝就会拷贝多层,即使是嵌套了对象,也会都拷贝出来。深拷贝在计算机中开辟了一块内存地址用于存放复制的对象,原对象的改变不会对拷贝出的对象产生影响。

2.两者的区别:

深拷贝和浅拷贝最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用。

3.实现浅拷贝的方法:

①自定义函数实现(示例拷贝一个对象:函数里定义一个空对象,然后for循环将目标对象中的内容伪数组形式赋给空对象)
②ES6:Object.assign({ },obj) (这是一个对象合并方法)
③ES6:扩展运算—let newObj = {…obj};
④引用lodash.js,使用它的_.clone(value)实现

4.实现深拷贝的方法:
①递归拷贝(代码量大,一般不建议使用)
②JSON方法拷贝:JSON.parse、JSON.stringify(局限性:不能拷贝函数方法)
③Jquery中的extend方法 $.extend(true,[ ]/{ },a);
④引用lodash.js,使用它的_.cloneDeep(value)实现
⑤自定义函数拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值