JavaScript之深浅拷贝

浅拷贝

Object.assign()

Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。但是 Object.assign()进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。

const obj1 = {x: 1, y: 2};
const obj2 = Object.assign({}, obj1);

obj2.x = 2;
console.log(obj1) //{x: 1, y: 2} //原对象未改变
console.log(obj2) //{x: 2, y: 2}

const obj1 = {
    x: 1, 
    y: {
        m: 1
    }
};
const obj2 = Object.assign({}, obj1);

obj2.y.m = 2;
console.log(obj1) //{x: 1, y: {m: 2}} 原对象也被改变
console.log(obj2) //{x: 2, y: {m: 2}}

Array.concat()

const arr = [1,2,3,4,[5,6]];
const copy = arr.concat();
   
copy[0] = 2; 
arr; //[1,2,3,4,[5,6]];

// 改变数组中的引用类型值,原数组也会跟着改变
copy[4][1] = 7
arr //[1,2,3,4,[5,7]];

针对数组能实现类似效果的还有slice()和Array.from()等

深拷贝

猜你喜欢

转载自www.cnblogs.com/xiaobaiv/p/12667069.html