Object.assign 浅拷贝还是深拷贝

358 阅读1分钟

一直说Object.assign 是浅拷贝,可以当我运行下面的代码

var obj1 = {name:"obj1", age:20};
var obj2 = Object.assign({}, obj1);
obj2.name = "obj2";
console.log(obj1.name); // obj1
console.log(obj2.name);// obj2

改变了 obj2 的 name 属性,但 obj1 的 name 并没有发生变化,不是说Object.assign 是浅拷贝吗?再来看看下面的代码

var obj1 = {name:{a:1}};
var obj2 = Object.assign({}, obj1);
obj2.name.a = 2;
console.log(obj1.name); // {a:2}
console.log(obj2.name);// {a:2}

得到obj1的 name 与 obj2 的 name 里的 a 属性值是一样的, 所以Object.assign是第一级属性深拷贝,以后级别属性浅拷贝