JavaScript-拷贝

浅拷贝:只拷贝最外面层的拷贝方式

深拷贝:所有层都拷贝的方式

观察以下代码,我们可以看到,作为键值对出现的数据,其中,uname,age,sex是基本类型,进行值传递,而color,message是引用类型,进行地址传递

let obj = {
			uname : '猫',
			age : 1,
			sex : '公',
			color : ['red', 'black', 'yellow', 'pink'],
			message : {
				index : 1,
				score : 99
			}
		}

浅拷贝:

let obj = {
			uname : '猫',
			age : 1,
			sex : '公',
			color : ['red', 'black', 'yellow', 'pink'],
			message : {
				index : 1,
				score : 99
			}
		}
    let newObj = {};
    Object.assign(newObj, obj); //拷贝
    obj.message.score = 10;//新的也会更改
    console.log(obj, newObj);

浅拷贝只能拷贝基本数据类型,复杂一点的,因为值传递的原因,更改原本的obj复杂类型的值,newObj的值也会改变,构不成拷贝

深拷贝:

let obj = {
			uname : '猫',
			age : 1,
			sex : '公',
			color : ['red', 'black', 'yellow', 'pink'],
			message : {
				index : 1,
				score : 99
			}
		}
let newObj = {};
		function Copy (newObj, obj) {
			for ( let key in obj ) {
				if ( obj[key] instanceof Array ) {// obj[key] 是数组
					 // obj[key]是数组,遍历
					 newObj[key] = [];
					Copy(newObj[key], obj[key]); //递归
				} else if ( obj[key] instanceof Object ) { // obj[key]是对象
					// obj[key]是对象,遍历
					newObj[key] = {};
					Copy(newObj[key], obj[key]);
				} else {
					newObj[key] = obj[key];
				}
			}
		}
		Copy(newObj, obj);
		obj.message.score = 123;
		console.log( obj, newObj );

深拷贝是所有数据类型都可以拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值