js深さコピーと浅いコピー

878 ワード

1.Object.assign(target, obj1, obj2);
var a = {a:1,b:2}; var b = {}; Object.assign(b, a); console.log(b);//{a:1,b:2} a.a=2; console.log(b);//{a:1,b:2}
深いコピーのように見えますが、実はそうではありません.以下を参照してください.
var a = {a:1,b:2, c: [0,2]}; var b = {}; Object.assign(b, a); console.log(b);//{a:1,b:2, c: [0,2]} a.c[0]=2; console.log(b);//{a:1,b:2, c: [2,2]}
このことからassignは浅いコピーに属する
jsの深さコピーを実現する方法はいくつかあります.
    :          JSON       ,      。
var deepClone = function (obj) {
    var _tmp,result;
    _tmp = JSON.stringify(obj);
    result = JSON.parse(_tmp);
    return result;
}
var obj1 = {family:{brother:"gege",father:"father",mother:"mother"},name:"xx"};
var obj2 = deepClone(obj1);
obj1.family.brother = "dd";
console.log(obj1); 
console.log(obj2); 

シナリオ2:再帰を使用してオブジェクトの各フィールドを新しいオブジェクトに割り当て、returnします.