深拷贝与浅拷贝

深拷贝与浅拷贝

  – 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响
  – 浅拷贝是拷贝它的引用地址
  – 深拷贝这个问题面试的时候常常会问到,所以下面举例出三种深拷贝的方法

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 返回对创建此对象的数组函数的引用

标签

发表评论

您必须启用javascript才能在此处查看验证码