- ------深拷贝 :拷贝对象的具体内容,内存地址是自主分配的,拷贝结束后两个对象虽然存的值一样,但是内存地址不一样
- ------浅拷贝 :对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。注意:当内存销毁的时候,指向对象的指针 ,必须重新定义,才能够使用(浅拷贝是一个传址,也就是把a的值赋给b的时候同时也把a的址赋给了b, 当b(a)的值改变的时候,a(b)的值同时也会改变)
- ------什么是引用数据类型? 引用数据类型有哪些 (对象,数组,function,map,set);而引用数据类型就会出现深浅复制
- ------深拷贝实现方法有以下几种:
1 递归的方法 function deepClone1(obj) { let objClone = Array.isArray(obj) ? [] : {}; if(obj && typeof obj === 'object'){ for(let key in obj){ if(obj[key] && typeof obj[key] === 'object'){ objClone[key] = deepClone1(obj[key]); //循环递归直到属性不为一个object为止 }else{ objClone[key] = obj[key]; } } } return objClone; } let person1 = { name:'园丁', job:{ salary:50000, address:'高新', id:{ idCard:5003888 } } }; let person2 = deepClone2(person1); console.log(person1); console.log(person2); let arr1 = [ 1, 2, [3,4], 5 ]; let arr2 = deepClone1(arr1); console.log(arr1); console.log(arr2); console.log(arr1 === arr2); //false console.log(person1 === person2); //false 说明深拷贝得到的不是同一个对象
2.使用json对象的方法 // 通过json对象实现深拷贝 // JSON.stringify() 【从一个对象中解析出字符串】 // JSON.parse() 【从一个字符串中解析出对象】 function deepClone2(obj){ let _obj = JSON.stringify(obj); console.log(_obj); let objClone = JSON.parse(_obj); console.log(objClone); return objClone; } let person3= deepClone2(person1);
3.Object.assign()方法 // 这个方法去复制 对象只有一级属性的时候此方法为深复制 // 在有二级属性的时候 为浅复制二级属性 let person4 = Object.assign({},person1); console.log(person4);
4.jq 的extend方法 let arr3 = $.extend(true,[],arr1); console.log(arr3);
深拷贝+浅拷贝,及深拷贝的几种实现方式
最新推荐文章于 2024-01-12 09:42:53 发布