📖深拷贝与浅拷贝
深拷贝与浅拷贝
– 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响
– 浅拷贝是拷贝它的引用地址
– 深拷贝这个问题面试的时候常常会问到,所以下面举例出三种深拷贝的方法
JSON方法
– 利用 JSON.stringify() 与 JSON.parse()
弊端: – 利用JSON这个方法无法处理 Function(函数) , RegExp(正则表达式) ,undefined(未定义)
let obj = {name:'小红',sex:'男',obj_tarn:function(){console.log('a')}}; let arr = [1,2,[3,4]]; let JSON_obj = JSON.stringify(arr) obj.name = '小绿'; let JSON_obj = JSON.parse(JSON_obj); console.log(JSON_obj); console.log(obj);
递归拷贝
– 利用递归判断每层属性的引用类型
let obj = {a:1,b:'name',c:function(){console.log('This C');},d:{da:1},e:[2,3,4]};//定义一个对象其中包含number,string,function,object let tar = {}//定义一个空对象 shen(obj,tar); function shen(obj,tar){ for(let i in obj){ if(typeof obj[i] === 'object'){ if(obj[i].constructor === Array){ tar[i] = []; }else{ tar[i] = {}; } shen(obj[i],tar[i]); }else{ tar[i] = obj[i]; } } return tar; } obj.b='txt'; console.log(obj); console.log(tar);
本文章只写了两种可以进行深拷贝的方法,很实用
本文用到的方法
for in 递归出对象中的属性
typeof 输出对象的数据类型
constructor 返回对创建此对象的数组函数的引用
🧐发表评论