递归深度拷贝

浅度拷贝(js的数据类型)数组,对象

1.基本数据类型,引用数据类型
             第一层是深度拷贝,第二层或者是第三层那么是浅度拷贝(拷贝内存引用地址)
            导致拷贝的数组值发生变化,原数组的值也会跟着发生变化
2.JSON.parse(JSON.stringify(obj))将js对象序列化(JSON字符串)
            再使用JSON.parse来反序列化(还原)js对象;
            当数据und,null,Symbol(缺陷)
3.手动递归的方式来实现深度克隆
           浅度拷贝(js的数据类型)数组,对象

	let obj={
				age:21355,
				name:"绝代风华",
				books:["《时间的话》","《海底世界》","《软天空》"],
				friends:{
					name:"读后感积分",
					age:251232,
					books:["多喝水防护","大户复工","供电所覆盖","花多少功夫"]
				}
			}
			//递归深度拷贝
			function shows(obj){
				let objss=obj instanceof Array ? [] : {};//三元表达式 条件?表达式1:表达式2
				for (let key in obj) {
					if (obj.hasOwnProperty(key)) {//判断obj中是否存在当前key值,存在返回true,不存在返回false
						if (obj[key]&&typeof obj[key]==='object') {//判断obj是否为空,并且类型是否为对象类型
							// console.log(obj[key]);
							 objss[key]=shows(obj[key]);//是对象类型则重新调用函数
						} else{
							objss[key]=obj[key];//不是对象类型则直接赋值
						}
					}
				}
				return objss;//把拷贝好的对象返回给函数
			}
			let objss= shows(obj)
			console.log(objss);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值