js深克隆方法封装

文章介绍了JavaScript中浅克隆和深克隆的概念。浅克隆是简单的赋值操作,导致两个变量指向同一内存地址,改变一个会影响另一个。而深克隆则是创建独立副本,即使原对象改变,副本也不会受影响。文中提供了一个使用递归实现深克隆的函数示例,特别提到了在处理包含Symbol类型属性的对象时使用Reflect.ownKeys()的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 浅克隆

就是平时的赋值,赋值之后指针指到同一个栈堆,那么我无论改变哪一个值,另外一个赋值或者被赋值的变量都会同时被改变

var num1 = 10;
var num2 = num1;
num2 = 11;
console.log(num1,num2);	// 11,11
  • 深克隆

就是我虽然继承与你,但是我与你是两个独立的个体,两者任意谁的改变都无法改变对方
其次考虑到适应数据的复杂程度,一般是用递归

const oldObj = {
	name:'jack',
	age:20,
	friend:{
		name:'king',
	}
}
function deepClone(obj = {}){
	if(typeof obj !== 'object' || obj == null){
		return obj
	}
	let result;
	if(obj instanceof Array){
		result = []
	}else{
		result = {}
	}

	// 说一些这里为什么用Reflect.ownKeys()
	// 正常来讲直接obj是可以的,但如果你的对象元素里面有Symbol类型,那for of的方法就会遍历不出来
	for(let key of Reflect.ownKeys(obj)){
		if(obj.hasOwnProperty(key)){
			result[key] = deepClone(obj[key])
		}
	}
	return result;
}

// 那么即使当我改变obj的friend元素,也会随之改变
const newObj = deepClone(oldObj)
newObj.friend.name = 'louse';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值