如何实现并区分JavaScript中的浅层克隆与深度克隆的详细示例?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1846个文字,预计阅读时间需要8分钟。
1+相关知识点+浅拷贝就是将栈内存中的引用复制一份,赋予一个新的变量,本质上两个指针指向同一块内存地址,内容也相同。其中,一个变量变化,另一个变量内容也会变化。+深拷贝就是创建一个新的内存空间,复制整个对象,包括所有属性,两个对象完全独立。+
1 相关知识点
- 浅克隆就是将栈内存中的引用复制一份,赋给一个新的变量,本质上两个指向堆内存中的同一地址,内容也相同,其中一个变化另一个内容也会变化。
- 深克隆就是创建一个新的空对象,开辟一块内存,然后将原对象中的数据全部复制过去,完全切断两个对象间的联系。
- 区别:浅克隆和深克隆最大的区别就是对引用值的处理了,即浅克隆之后你改我也改,深克隆之后你改我不改。(PS:原始值的处理一样)
- 原始值(栈数据stack):Number,Boolean(false/true),String,undefined,null
- 引用值(堆数据heap):Array,Object,function ··· Date,RegExp
2 浅层克隆
在浅层克隆中,原始值的克隆没问题,只是值的拷贝,不会出现你改我改的问题。但是引用值的克隆,就会出现你改我也改的问题,因为浅层克隆的是地址,即指向的是同一空间。
2.1 浅克隆函数
function clone(origin, target) { var target = target || {}; //容错,即防止用户不传递目标参数。
本文共计1846个文字,预计阅读时间需要8分钟。
1+相关知识点+浅拷贝就是将栈内存中的引用复制一份,赋予一个新的变量,本质上两个指针指向同一块内存地址,内容也相同。其中,一个变量变化,另一个变量内容也会变化。+深拷贝就是创建一个新的内存空间,复制整个对象,包括所有属性,两个对象完全独立。+
1 相关知识点
- 浅克隆就是将栈内存中的引用复制一份,赋给一个新的变量,本质上两个指向堆内存中的同一地址,内容也相同,其中一个变化另一个内容也会变化。
- 深克隆就是创建一个新的空对象,开辟一块内存,然后将原对象中的数据全部复制过去,完全切断两个对象间的联系。
- 区别:浅克隆和深克隆最大的区别就是对引用值的处理了,即浅克隆之后你改我也改,深克隆之后你改我不改。(PS:原始值的处理一样)
- 原始值(栈数据stack):Number,Boolean(false/true),String,undefined,null
- 引用值(堆数据heap):Array,Object,function ··· Date,RegExp
2 浅层克隆
在浅层克隆中,原始值的克隆没问题,只是值的拷贝,不会出现你改我改的问题。但是引用值的克隆,就会出现你改我也改的问题,因为浅层克隆的是地址,即指向的是同一空间。
2.1 浅克隆函数
function clone(origin, target) { var target = target || {}; //容错,即防止用户不传递目标参数。

