没有合适的资源?快使用搜索试试~ 我知道了~
一、为什么有深拷贝和浅拷贝? 这个要从js中的数据类型说起,js中数据类型分为基本数据类型和引用数据类型。 基本类型值指的是那些保存在栈内存中的简单数据段,即这种值是完全保存在内存中的一个位置。包含Number,String,Boolean,Null,Undefined ,Symbol。 引用类型值指的是那些保存在堆内存中的对象,所以引用类型的值保存的是一个指针,这个指针指向存储在堆中的一个对象。除了上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型。细分的话,有:Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型
资源推荐
资源详情
资源评论
javascript深拷贝、浅拷贝和循环引用深入理解深拷贝、浅拷贝和循环引用深入理解
一、为什么有深拷贝和浅拷贝?一、为什么有深拷贝和浅拷贝?
这个要从js中的数据类型说起,js中数据类型分为基本数据类型和引用数据类型。
基本类型值指的是那些保存在栈内存中的简单数据段,即这种值是完全保存在内存中的一个位置。包含
Number,String,Boolean,Null,Undefined ,Symbol。
引用类型值指的是那些保存在堆内存中的对象,所以引用类型的值保存的是一个指针,这个指针指向存储在堆中的一个对象。
除了上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型。细分的话,有:Object 类型、Array 类型、
Date 类型、RegExp 类型、Function 类型 等。
正因为引用类型的这种机制, 当我们从一个变量向另一个变量复制引用类型的值时,实际上是将这个引用类型在栈内存中的
引用地址复制了一份给新的变量,其实就是一个指针。因此当操作结束后,这两个变量实际上指向的是同一个在堆内存中的对
象,改变其中任意一个对象,另一个对象也会跟着改变。
因此深拷贝和浅拷贝只发生在引用类型中。简单来说他们的区别在于:
1. 层次
浅拷贝 只会将对象的各个属性进行依次复制,并不会进行递归复制,也就是说只会赋值目标对象的第一层属性。
深拷贝不同于浅拷贝,它不只拷贝目标对象的第一层属性,而是递归拷贝目标对象的所有属性。
2. 是否开辟新的栈
浅拷贝 对于目标对象第一层为基本数据类型的数据,就是直接赋值,即「传值」;而对于目标对象第一层为引用数据类型的
数据,就是直接赋存于栈内存中的堆内存地址,即「传址」,并没有开辟新的栈,也就是复制的结果是两个对象指向同一个地
址,修改其中一个对象的属性,则另一个对象的属性也会改变,
深拷贝 而深复制则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
二、浅拷贝二、浅拷贝
以下是实现浅拷贝的几种实现方式:
1.Array.concat()
const arr = [1,2,3,4,[5,6]];
const copy = arr.concat(); \ 利用concat()创建arr的副本
\改变基本类型值,不会改变原数组
资源评论
weixin_38623080
- 粉丝: 5
- 资源: 1002
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功