一直說Object.assign 是淺拷貝,能夠當我運行下面的代碼spa
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 是淺拷貝嗎?再來看看下面的代碼code
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是第一級屬性深拷貝,之後級別屬性淺拷貝console