理解js中深拷贝、浅拷贝。

欢迎大家阅览我的文章、感谢!

你好!这是一篇关于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。

在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章