理解JavaScript浅复制和深复制之前,我们需要先了解js的数据类型:基本数据类型和引用类型。
基本数据类型:undifined, null, Number, String ,Boolean,这一些是存放在栈stack中的。
引用数据类型:Object, Array等,这一些事存放在堆heap中的。
1.浅复制
看如下代码:
var myObj1={
name:"Scott"
};
var myObj2=myObj1;这一种方式就是浅复制,这样做的问题是,myObj1是一个引用类型的对象,我们将myObj1直接赋值给myObj2的话,只是将引用赋值给了myObj2,这样myObj2和myObj1都指向相同的内存地址。这样的话,如果我们重新给myObj2赋值的话,myObj1的值也会改变。
myObj2.name="123";
console.log(myObj1.name); //结果:123
2.深复制
但我们开发过程中,可能并不想让myObj2和myObj1有这种联系,这个时候就需要深复制了。那么如何进行深复制呢?
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);
本文探讨JavaScript中浅复制和深复制的概念。浅复制仅复制对象的表面,而深复制则创建对象的完整副本。文章通过代码示例解释了这两种复制方式,并介绍了如何使用JSON.parse和JSON.stringify实现深复制的方法。

3830

被折叠的 条评论
为什么被折叠?



