【JavaScript】面试手撕浅拷贝
https://i-blog.csdnimg.cn/blog_migrate/99ccf6c56a4494937724af8980f2fc05.png#pic_center个人主页: 鑫宝Code热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
个品德言: "如无须要,勿增实体"
引入
浅拷贝和深拷贝应该是面试时非常常见的问题了,为了能将这两者说清楚,于是计划用两篇文章分别解释下深浅拷贝。
PS: 我第一次听到拷贝这个词,有种莫名的熟悉感,感觉跟某个英文很相似,后来发现确实Copy的音译,感觉这翻译照旧蛮故意思的。
什么是浅拷贝
行文至此,肯定会有朋侪问,什么事浅拷贝呢?顾名思义,就是浅浅的copy一下。
在JavaScript中,对于浅拷贝分为两种情况。
[*]对于浅拷贝,如果待拷贝的数据是基础类型的属性(如Number、String、Boolean等基本类型),那么只需要将这个值直接复制过来即可。
[*]对于浅拷贝,如果待拷贝的数据是引用类型的属性(如对象,数组),那么复制的则是对象的引用以及第一层的基础属性值。
https://i-blog.csdnimg.cn/blog_migrate/ccae3c11febb539eb6781928059c138e.png 基础类型与引用类型的区别
谈到这,顺带谈一下基础类型与引用类型的区别。
基础类型
[*]直接存储在栈内存中。
[*]存储的是现实的数据值。
[*]内存空间固定且较小。
引用类型
[*]对象(如数组,函数,对象等)的属性值存在堆内存中。
[*]栈内存中存储的是指向堆内存中对象的引用或指针,而非对象自己的内容。
[*]内存空间巨细不固定,取决于对象结构的复杂性。
https://i-blog.csdnimg.cn/blog_migrate/563b0fc2dc421ec030a99f3b48e1836b.png 手动实现浅拷贝
因为值的拷贝可以直接赋值即可。我们这里实现下对象的浅拷贝。
对象的浅拷贝:复制对象的引用以及第一层属性值。
思绪: 我们先构造一个新对象,然后将它的属性值等于原对象的属性值。这里新对象和原对象的属性依然会共享引用,但对于第一层的基础属性却不会共享了。所以我们实现的浅拷贝 是拷贝一层。
function
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]