通过Array.from和递归实现深拷贝
October 03, 2020
2100
Array.from的作用以及通过Array.from递归实现深拷贝
一、作用
Array.from:将一个可迭代对象转换为数组并将其返回
二、参数说明
第一个参数 目标迭代对象 第二个参数map函数(作用同map) 第三个参数map回调使用的this对象
三、Array.from的浅拷贝
浅拷贝概念与原理
浅拷贝:在JavaScript语言中,数据类型被定义在栈和堆中,其中基本数据类型:Number
,String
,Symbol
,BigInt
,undefined
,null
都是定义在栈上,对其进行赋值和修改操作都是直接在栈上进行操作。 而唯一的引用数据类型:object
在使用的时候是:先在堆里开辟一片空间用于存放其数据,随后在栈上开辟一个指针并将其指向堆里开辟的空间。
1 |
|
如上所示的代码,实际上obj变量中,存的是一个指针,这个指针指向堆中存放的代表{a:1}
的底层二进制数据 浅拷贝,也就是变量赋值时,仅是复制了一份程序栈中的指针(地址),而非在堆里重新申请空间,这样,当我们改变堆里数据的属性,就会改变所有指针指向其中的变量。
1 |
|
浅拷贝在Array.from中的体现
使用Array.from直接返回的数组,基本数据类型是拷贝了一份,不会被影响。但是数组内部的引用数据类型是浅拷贝,也就是拷贝下来的仍然是一个指针,而非在堆栈上创建一个新数组,当对其进行更改时会影响到另一个对象的数据元素
1 |
|
利用第二个参数递归实现深拷贝
1 |
|
结果:
- 本文作者:AX
- 本文链接:http://xgpax.top/2020/10/03/array-from%E7%9A%84%E4%BD%9C%E7%94%A8%E4%BB%A5%E5%8F%8A%E9%80%9A%E8%BF%87array-from%E9%80%92%E5%BD%92%E5%AE%9E%E7%8E%B0%E6%B7%B1%E6%8B%B7%E8%B4%9D/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!