哪里可以接做ppt的网站怎么做一个网站页面
浅拷贝:拷贝的是引用类型数据的第一层:数组或者对象:的地址
深拷贝:通过不断的递归进行拷贝
原理普及:在js中引用类型的变量储存的时候引用类型数据的地址,因此当地址被重新赋值新的对象的时候,修改新的对象,实际上就等于修改了原来的对象。因此浅拷贝的出现就是开辟一个新的地址去拷贝原来对象的数据,这样修改的时候 就不会影响到原来的数据了。
但是因为浅拷贝只能深究到第一层,因此就有了深拷贝的出现。
浅拷贝:
<script>// 浅拷贝 首先要知道深浅拷贝只针对引用数据类型// 浅拷贝拷贝的是引用类型的里面第一层的地址 储存空间中,有栈和堆 栈存放地址 堆存放内容// 实现浅拷贝有两种方式 第一种类似于解构const obj = {name:"ddd",age:18,hobby:"basketball",body:{foot:"foot",head:"head"}}const o = {...obj}console.log(o);console.log(obj);o.age = 20console.log(o);console.log(obj);// 第二种方式实现浅拷贝 Object.assgin() const obj2 = {name:"ddd",age:18,hobby:"basketball",body:{foot:"foot",head:"head"}}const o2 = {}Object.assign(o2,obj2)console.log(o2);console.log(obj2);
// 如果是数组 两种方法 对应就是[...xxx]和.concat()</script>
深拷贝:
<script>// const obj = {// name:"ddd",// age:20,// hobby:["项目1","项目2"]// }// const o = {// }// function deepCopy (newObj,oldObj) {// // k是属性名 oldObj[k]属性值// for(let k in oldObj){// // 处理数组的问题// if(oldObj[k] instanceof Array){// newObj[k] = []// // 这里有点难理解 newObj[k]就是hobby数组 然后对这个数组进行操作// deepCopy (newObj[k],oldObj[k])// }else{// newObj[k] = oldObj[k]// }// }// }// deepCopy(o,obj) //o是新对象 obj是旧对象// console.log(o);// // 如果我修改了新对象里面的数组或者对象 新旧同时也会被修改 所以没有达到拷贝的效果 引用类型还是把地址拿来了// console.log(obj);// 第二种方式实现深拷贝// 然后引入// <script src="xxxx"><script>// const obj = {// name:"ddd",// age:20,// hobby:["项目1","项目2"]// }// const o = _.cloneDeep(obj)// console.log(o)//第三种方式深拷贝 JSONconst obj = {name:"ddd",age:20,hobby:["项目1","项目2"]}// 把对象转换为json字符串JSON.stringify(obj)console.log(JSON.stringify(obj));// JSON.parse(JSON.stringify(obj)) 又把json字符串转换为了对象 但是这个时候的对象 等于在空间有开辟了一个新的地址 const o = JSON.parse(JSON.stringify(obj))//完美实现深拷贝console.log(o);o.hobby.push("dddddd")console.log(o);console.log(obj);</script>