【手写代码】深拷贝和浅拷贝

目录

一、定义

二、举例🌰

1. 最简单的浅拷贝

2. 数组的浅拷贝( new_arr.concat(arr) )

3. 对象的浅拷贝( Object.assign(new_obj, obj) )

4. 使用json实现深拷贝(以数组为例)

总结:常用的拷贝技术

三、手写深拷贝


一、定义

拷贝:就是赋值,把一个变量赋值给另一个变量,对变量的内容进行拷贝。

了解深拷贝和浅拷贝之前需要对基本数据类型和引用数据类型的内存上存储(栈/堆)的区别有清楚地认识,深拷贝和浅拷贝是针对于引用数据类型。

浅拷贝:拷贝后的数据会影响原数据

深拷贝:产生了新的数据,而不是对原数据的引用

判断依据:数据存放是对象在栈内存地址的引用还是对象的引用

二、举例🌰

1. 最简单的浅拷贝

//地址的拷贝,不产生新的数据
var arr = [1,2,4];
Var new_arr = arr;
new_arr[0] = '改';
console.log(arr, new_arr);  

2. 数组的浅拷贝( new_arr.concat(arr) )

//只拷贝一层(深度不够)
let arr = ['chailo',2,null,undefined,function f() {},[5],[6],{obj: 'obj'}];
let new_arr = [].concat(arr)
new_arr[5] = ['改'];
new_arr[6][0] = '改';
new_arr[7].obj = '改';
console.log(arr,new_arr);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值