深浅拷贝方法1

<script>
			/* 
			  浅拷贝:拷贝基本数据类型时,不受任何影响,
			       当拷贝引用类型时,源对象也会被修改。
			 深拷贝:就是完完全全拷贝一份新的对象,
			        它会在内存的堆区域重新开辟空间,
					修改拷贝对象就不会影响到源对象
			*/
			var obj1 = {
				"a": 1,
				"b": 2
			};
			//浅拷贝
			var obj2 = obj1;
			obj2.a = 6;
			console.log(obj1); //{a: 6, b: 2}源对象也被修改
			//对象深拷贝
			var obj3 = {};
			for (var key in obj1) {
				//obj3.a=1
				obj3[key] = obj1[key];
			}
			console.log(obj3); //{a: 6, b: 2}
			obj3.b = 888;
			console.log(obj3); //{a: 6, b: 888}
			console.log(obj1); //{a: 6, b: 2}源对象未被修改



			//数组深拷贝
			var arr1 = [1, 2, 3];
			var arr2;
			arr2 = arr1;
			arr2[1] = 6;
			console.log(arr2); //[1, 6, 3]
			console.log(arr1); //[1, 6, 3]  源对象被修改
			var arr3 = [];
			for (var key in arr1) {
				arr3[key] = arr1[key];
			}
			console.log(arr3); //[1, 6, 3]
			arr3[1] = 666;
			console.log(arr3); //[1, 666, 3]
			console.log(arr1); //[1, 6, 3] 源对象未被修改
		</script>

深拷贝方法2 

<script>
			var obj1 = {
				"a": 1,
				"b": 2
			};
			var ary1 = [1, 2, 3];

			var obj = {
				"a": 1,
				"b": 2,
				"c": ['hello', 'world'],
				"stu": {
					'name': 'zs',
					"age": 18,
					"score": [10, 50, 60]
				}
			}
			//obj可能是数组也可能是对象
			function deepCopy(obj) {
				var newObj = Array.isArray(obj) ? [] : {};
				for (var key in obj) {
					if (typeof(obj[key]) != "object") {
						newObj[key] = obj[key];
					} else {
						//递归 函数内部调用函数本身
						var no = deepCopy(obj[key]);
						newObj[key] = no;
					}
				}
				return newObj;
			}
			var obj2 = deepCopy(obj1);
			console.log(obj2);

			var ary2 = deepCopy(ary1);
			console.log(ary2);

			var obj6 = deepCopy(obj);
			console.log(obj6);
			obj6.stu.score[1] = 100;
			console.log(obj6);
			console.log(obj);
			//深拷贝2
			var obj8 = JSON.parse(JSON.stringify(obj));
			console.log(obj8);
			obj8.c[0] = "祖国统一";
			console.log(obj8);
			console.log(obj);
		</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值