object,assign方法

1.复制一个对象

constobj={a:1};

constcopy=Object.assign({},obj);

console.log(copy);// { a: 1 }

2.合并对象

consto1={a:1};

consto2={b:2};

consto3={c:3};

constobj=Object.assign(o1,o2,o3);

console.log(obj);// { a: 1, b: 2, c: 3 }

console.log(o1);// { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

3.合并具有相同属性的对象

consto1={a:1,b:1,c:1};

consto2={b:2,c:2};

consto3={c:3};

constobj=Object.assign({},o1,o2,o3);

console.log(obj);// { a: 1, b: 2, c: 3 }

属性被后续参数中具有相同属性的其他对象覆盖。

4.深拷贝问题

针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。

letobj1={a:0,b:{c:0}};

letobj2=Object.assign({},obj1);

console.log(JSON.stringify(obj2));// { a: 0, b: { c: 0}} 

obj1.a=1;

console.log(JSON.stringify(obj1));// { a: 1, b: { c: 0}} 

console.log(JSON.stringify(obj2));// { a: 0, b: { c: 0}}

 obj2.a=2;

console.log(JSON.stringify(obj1));// { a: 1, b: { c: 0}}

 console.log(JSON.stringify(obj2));// { a: 2, b: { c: 0}}

obj2.b.c=3;

console.log(JSON.stringify(obj1));// { a: 1, b: { c: 3}} 

console.log(JSON.stringify(obj2));// { a: 2, b: { c: 3}}

 // Deep Clone

obj1 = {a : 0, b : { c : 0 } };

letobj3 = JSON.parse(JSON.stringify(obj1));

obj1.a = 4;

obj1.b.c = 4;

console.log(JSON.stringify(obj3));// { a: 0, b: { c: 0}}

你可能感兴趣的:(object,assign方法)