Object.assign只是复制该对象可枚举的属性。如果该对象的属性是一个对象。Object.assign并不能将这个对象复制过来。只是将该地址复制过来。所以Object.assign不是深克隆。
- 例子:
const log = console.log;
function test () {
'use strict';
let obj1 = {a: 0, b: {c: 0}}
let obj2 = Object.assign({}, obj1);
log(JSON.stringify(obj2)) // 将对象拷贝到另一个对象里面。
obj1.a = 1;
log(JSON.stringify(obj1)); // 值被改变了
log(JSON.stringify(obj2)); // 但是并未改变拷贝到的这个对象。
obj2.a = 3;
log(JSON.stringify(obj1)) // 改变2并未改变1
log(JSON.stringify(obj2)) // 改变2只有2改变
obj2.b.c = 344
log(JSON.stringify(obj1)) // 改变2里面的一个对象的值。1里面也会改变。
log(JSON.stringify(obj2)) // 改变2
// Deep clone
obj1 = { a: 0 , b: { c: 0}};
let obj3 = JSON.parse(JSON.stringify(obj1)); // 深克隆
obj1.a = 4 // 改变1
obj1.b.c = 4
console.log(JSON.stringify(obj3)) // 并未改变2
}
test()