解析深拷贝和浅拷贝

解析深拷贝和浅拷贝

对于这个的区别我们还是要先了解一下储存问题
基础数据类型(primitive data types):这个是储存在栈里面;
引用数据类型(Composite data types):这个是储存在堆里面的;
在栈中直接开辟空间储存,但是在堆里面是存储的是地址。这就解释了如果直接赋值基本数据类型的话是重新开辟空间,但是引用数据类型赋值的时候是直接赋值的地址,赋值的值还是指向原来值的地址。
这样一来就有了深拷贝和浅拷贝区别。
浅拷贝

  1. 直接用等号赋值
  2. 使用Object.assign

深拷贝

  1. 自己写一个递归进行逐一赋值
    这样的代码几乎没有什么问题

这个可以代码演示一下

var obj = {
    a: 10,
    c: 20,
    function(params) {
        console.log(params);

    },
    v: undefined
}
var arr = [4, 5, [6, 7, { 5: 20 }]]
function shenkaobei(data) {
    var NewData = data instanceof Array ? [] : {};
    for (const i in data) {
        NewData[i] = typeof data[i] == "object" ? shenkaobei(data[i]) : data[i]
    }
    return NewData
}
console.log(shenkaobei(arr));
console.log(shenkaobei(obj));

结果:
[ 4, 5, [ 6, 7, { ‘5’: 20 } ] ]
{ a: 10, c: 20, function: [Function: function], v: undefined }

2.利用 JSON.parse(JSON.stringify())

console.log(JSON.parse(JSON.stringify(obj)));
console.log(JSON.parse(JSON.stringify(arr)));

结果:
{ a: 10, c: 20 }
[ 4, 5, [ 6, 7, { ‘5’: 20 } ] ]
这个方法会有些问题就是 不能复制出函数和undefined
还有个小问题就是具有循环引用的对象时,会报错

这些就是我大概的整理 我是一个小白 大佬多多关照 这个我的第一篇
以后加油 未来可期 谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Endless-y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值