浅拷贝和深拷贝

January 04,2018

//浅拷贝
var a = 1;
var b = a;
a = 2
console.log(b)  // 2

var c = {aa:1,bb:2};
var d = c
d.bb = 3
console.log(c)  // {aa:1,bb:3}
console.log(d)  // {aa:1,bb:3}
//深拷贝
var c = {t: 1, p: 'gg'};
var d = deepCopy(c);
d.t = 3;
console.log(c); // {t: 1, p: 'gg'}
console.log(d); // {t: 3, p: 'gg'}

Object.assign() //根属性深拷贝,之后的属性浅拷贝

Object.assign() 只是一级属性复制,比浅拷贝多深拷贝了一层而已。用的时候,还是要注意这个问题的。

var a = {aa:'hello world',bb:2} 
var na = Object.assign({},a)
na.aa = 'hello alice'
console.log(a) //{aa:'hello world',bb:2} 
console.log(na) //{aa:'hello alice',bb:2} 

var a = {aa:'hello world',bb:{cc:1,dd:2}} 
var na = Object.assign({},a)
na.bb.cc = 'hello alice'
console.log(a) // {aa:'hello world',bb:{cc:'hello alice',dd:2}} 
console.log(na) // {aa:'hello world',bb:{cc:'hello alice',dd:2}} 

发现一个可以简单实现深拷贝的方法,当然,有一定限制,如下:

const obj1 = JSON.parse(JSON.stringify(obj));

思路就是将一个对象转成json字符串,然后又将字符串转回对象。

// Deep Clone
  obj1 = { a: 0 , b: { c: 0}};
  let obj3 = JSON.parse(JSON.stringify(obj1));
  obj1.a = 4;
  obj1.b.c = 4;
  console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}

上一篇 下一篇
Comments
Write a Comment