网站建设qinnet,哈尔滨营销网站建设,自己设计房子装修app免费,eyoucms官网JavaScript中存在两大数据类型#xff1a; 基本类型 和 引用类型 基本类型数据保存在在栈内存中 引用类型数据保存在堆内存中#xff0c;引用数据类型的变量是一个指向堆内存中实际对象的引用#xff0c;存在栈中 深拷贝和浅拷贝都只针对于引用类型。 一、 浅拷贝#xff1… JavaScript中存在两大数据类型 基本类型 和 引用类型 基本类型数据保存在在栈内存中 引用类型数据保存在堆内存中引用数据类型的变量是一个指向堆内存中实际对象的引用存在栈中 深拷贝和浅拷贝都只针对于引用类型。 一、 浅拷贝拷贝的是地址。如下就是一个浅拷贝的方法
1、拓展运算符 先了解一下Object.assign方法如下图所示 简单对象用Object.assign()方法实现浅拷贝如下这是es6新增的。
2、Object.assign() 总结浅拷贝只拷贝一层简单数据类型即简单数据类型只会拷贝值但是对于更深层次的对象只会拷贝它的地址。
简单理解浅拷贝如果拷贝的是单层对象就没问题如果有多层就有问题。
问题1直接赋值和浅拷贝有什么区别
答直接赋值的方法只要是对象都会相互影响因为是直接拷贝对象栈里面的地址。
浅拷贝如果是一层对象不相互影响如果出现多层对象拷贝还会相互影响。
问题2浅拷贝怎么理解
答拷贝对象之后里面的属性值是简单数据类型直接拷贝值。
如果属性值是引用数据类型则拷贝的是地址。
二、深拷贝拷贝的是对象不是地址
常见方法1、通过递归实现深拷贝2、lodash/cloneDeep3、通过JSON.stringify()实现
1、递归深拷贝简易版 先理解一下下面这段代码这个代码只解决了数组的问题但是没解决对象的问题。 再加上下面这段代码就能解决数组和对象的问题了 注意一定要先把数组写在前面因为数组也属于对象形式万物皆对象即先筛选完数组之后再筛选对象。
问做过深拷贝吗说一下深拷贝是怎么实现的。
答做过深拷贝啊做出来对象新对象不会影响旧对象要想实现深拷贝第一啊深拷贝要用到函数递归当我们在普通拷贝的时候没问题直接进行赋值就行了但是如果遇到数组的我们再次调用这个递归函数就可以了如果遇到的是对象形式那我再次利用递归把对象解决但是一定要先递归数组再递归对象。
2、js库lodash里面cloneDeep内部实现了深拷贝。
官网解释如下 代码如下 JSON对象的Stringify和Parse来实现深拷贝。要了解弊端
理解类似于阳澄湖大闸蟹把其他的螃蟹拿进阳澄湖里涮一涮再拿出来就成了阳澄湖大闸蟹表面看起来一样其实完全不一样。 该方法的弊端
1、obj里面有new Date()深拷贝后时间会变成字符串的形式。而不是时间对象
2、obj里有functionundefined则序列化的结果会把function或 undefined丢失
3、obj里有NaN则序列化的结果会变成null;
4、JSON.stringify()只能序列化对象的可枚举的自有属性如果obj中的对象是由构造函数生成的实例对象 深拷贝后会丢弃对象的constructor