深拷贝和浅拷贝

深拷贝和浅拷贝

共同点:复制

 

1. 浅拷贝:复制引用,而不是真正的复制了值。

某一个改变互相影响

var arr1 = ['a','b']

var arr2 = arr1;

 

Object.assign()

 

2. 深拷贝:复制不是引用,复制了真正的值。

改变互相不影响

 

JSON.parse和自己封装

 

例子:

 1.最简单的一种拷贝:浅拷贝

var arr1 = ['a','b','c','d'];

var arr2 = arr1;

 

arr1[0] = '你好吗';

arr2[1] = 'bbbbbbbb';

console.log( arr1,arr2 );

// 两个都一样

// [

// 0: "你好吗"

// 1: "bbbbbbbb"

// 2: "c"

// 3: "d"

// ]

2.浅拷贝 : Object.assign

var obj1 = {a:1,b:2}

var obj2 = Object.assign(obj1);

obj1.a = 'aaaaaa';

obj2.b = 'bbbbbb';

console.log( obj1, obj2 );

// {

// a: "aaaaaa"

// b: "bbbbbb"

// }

 

深拷贝

var obj3 = {a:1,b:2};

var obj4 = JSON.parse(  JSON.stringify(obj3)   )

obj3.a = 'aaaaaa';

obj4.b = 'bbbbbb';

console.log( obj3,obj4);

// obj3

// {

// a: "aaaaaa"

// b: 2

// }

// obj4

// {

// a: 1

// b: "bbbbbb"

// }

 

自己实现:深拷贝

var obj5 = {

    a:1,

    b:2,

    c:3,

    o:{},

    arr:[1,2,3]

}

 

function copyObj( obj ){
    var newObj = {};
    for( var key in obj ){
        newObj[key] = obj[key];
    }
    return newObj;
}

var obj6 = copyObj( obj5 );

obj5.a='aaaaa';

obj6.b='bbbbb';

console.log( obj5,obj6 )        

 

 
posted @ 2022-05-11 16:42  杨建鑫  阅读(20)  评论(0编辑  收藏  举报