深拷贝、浅拷贝
欢迎大家阅览我的文章、感谢!
你好!这是一篇关于javaScript深、浅拷贝的文章、做前端的小伙伴都应该有所了解、如有不正确的地方,欢迎各位大佬纠正。如果你正巧翻到这篇文章,希望你不要关闭,花出10多分钟仔细阅读,我相信你一定能看懂,并且进行实际代码练习,一定能掌握并老记。
浅拷贝
简单的说,浅拷贝就是对一个对象的地址的复制,并没有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变。
深拷贝
深拷贝就是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
举例子
浅拷贝:
深拷贝:
先看下面的代码:
var original = {
name: '腾',
age: 18,
position: '工程师',
};
假如我们要创建一个这个对象的副本(复制),这样即使原始被改变过的话,依旧可以通过副本得到原始对象的值。
这样:
var duplicate = original; // 浅拷贝
试着改变一个值:
original.name = '莹';
这样的话,原始对象original的属性name会跟着变成“莹”,因为这是一个浅拷贝,这样就获取不到原始对象原来那个值了。所以这么做是不正确的。
但是,通过用原始original变量的属性创建一个全新的变量,就能创建一个深拷贝副本。
看代码:
var duplicate = {
name: original.name,
age: original.age,
position: original.position
}; // 深拷贝
现在,如果更改duplicate.name,只是影响duplicate,不会影响original。