JavaScript浅复制和深复制的区别

本文探讨JavaScript中浅复制和深复制的概念。浅复制仅复制对象的表面,而深复制则创建对象的完整副本。文章通过代码示例解释了这两种复制方式,并介绍了如何使用JSON.parse和JSON.stringify实现深复制的方法。

    理解JavaScript浅复制和深复制之前,我们需要先了解js的数据类型:基本数据类型和引用类型。

    基本数据类型:undifined, null, Number, String ,Boolean,这一些是存放在栈stack中的。

    引用数据类型:Object, Array等,这一些事存放在堆heap中的。

    1.浅复制

    看如下代码:

var myObj1={
    name:"Scott"
};

var myObj2=myObj1;

    这一种方式就是浅复制,这样做的问题是,myObj1是一个引用类型的对象,我们将myObj1直接赋值给myObj2的话,只是将引用赋值给了myObj2,这样myObj2myObj1都指向相同的内存地址。这样的话,如果我们重新给myObj2赋值的话,myObj1的值也会改变。

myObj2.name="123";
console.log(myObj1.name); //结果:123



    2.深复制

    但我们开发过程中,可能并不想让myObj2myObj1有这种联系,这个时候就需要深复制了。那么如何进行深复制呢?

    i).最简单的办法:

var myObj1={
   name:"Scott"
};
var myObj2={};
myObj2.name=myObj1.name;
    因为String类型是基本数据类型,这样做的话,改变myObj2的值,并不会影响myObj1。但如果对象很复杂的话,这一种方式将非常麻烦。

    ii).JSON.parse和JSON.stringify()

    

var myObj1={
    name:"Scott"
 }

var myObj2=JSON.parse(JSON.stringify(myObj1));

    iii).其他方式
一些js库都提供了相关功能,比如Jquery的$.extend()

var myObj1={
    name:"Scott"
};

var myObj2=$.extend(true,{},myObj1);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值