今天看啥  ›  专栏  ›  HonGL54

浅拷贝和深拷贝

HonGL54  · CSDN  ·  · 2019-04-05 00:00

浅拷贝:拷贝所有的属性值到新的对象中,如果属性值是对象的,拷贝的则是地址。

  • Object.assign()
	let p1 = {
		age : 10,
		jobs:{
			first:'xxx'
		}
	}
	let p2 = Object.assign({} , p1);
	
	p1.age = 20;
	p1.jobs.first = 'zzz';
	
	console.log(p2.age)				//  10
	console.log(p2.jobs.first)   //    zzz
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • …(展开运算符)
	let p1 = {
		age : 10
	}
	let p2 = {...p1}
	p1.age = 20;
	console.log(p2.age)	//  10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

深拷贝:拷贝所有的属性值到新的对象中,如果属性值是对象也不影响。

  • JSON.parse(JSON.stringify(object)):

但是该方法有局限性:

  • 忽略undefined
  • 忽略symbol
  • 不能序列化函数
  • 不能解决循环引用对象
	let p1 = {
		age : 10,
		jobs:{
			first:'xxx'
		}
	}
	let p2 = JSON.parse(JSON.stringify(p1));
	
	p1.age = 20;
	p1.jobs.first = 'zzz';
	
	console.log(p2.age)				//  10
	console.log(p2.jobs.first)   //    xxx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

实现一个深拷贝需要考虑很多情况:DOM如何处理,原型链如何处理等,推荐使用: lodash的深拷贝函数




原文地址:访问原文地址
快照地址: 访问文章快照