深克隆与浅克隆的面试问题

深克隆与浅克隆的面试问题

面试官让我谈一下深克隆和浅克隆,我之前回答了B复制了A,A变了B也变了就是浅克隆,不然就是深克隆,感觉答的不是很对。请问面试官最想听到什么答案。

正在回答 回答被采纳积分+1

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

1回答
好帮手慕然然 2021-11-22 11:13:02

同学你好,可以先谈一下什么是深浅克隆以及深浅克隆产生的场景,然后再进行举例说明,思路如下:

浅克隆是只克隆对象的“表层”,一般用于基本类型值的克隆(比如数字、字符串、布尔等),而深克隆是克隆对象的全貌,一般用于引用类型值的克隆(比如对象、数组等 )。

当var a=b 变量传值时,如果b是基本类型值,则内存中会产生新的副本,此时可以实现克隆;而如果b是引用类型值,内存中不会产生新的副本,只是克隆它们的引用地址,此时需要进行深克隆,才能实现真正的克隆。

接下来讲一讲如何实现深克隆,先总结一下使用递归来实现,再讲一讲具体实现思路,如果可以的话,建议手写一下实现深克隆的代码,如下:

/**
					 * 深拷贝
					 * @param {Object}  obj 要拷贝的对象
					 */
					function deepClone(obj = {}){
						if(typeof obj !== 'object' || obj == null){
							// obj是null ,或者不是对象和数组,直接返回
							return obj;
						}
						
						// 初始化返回结果
						let result;
						
						if(obj instanceof Array){ // 判断是否是数组
							result = []
						}else{
							restlt = {}
						}
						
						for(let key in obj){
							// 保证key不是原型的属性
							if(obj.hasOwnProperty(key)){ 
								// 递归调用!!!
								result[key] = deepClone(obj[key])
							}
						}
						
						return result;
					}

只要同学能把深浅克隆涉及到的知识点都讲到了,并且讲明白了就可以。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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