js中深拷贝和浅拷贝的区别

浅拷贝指向的是同一个对象。

就是把一个对象的所有内容复制给另一个对象,或者说就是把引用地址给了另一个对象,他们指向同一个地址。

var obj1 = {

    name: 'mimi',

    age: 2.5,

    like: ['eat','fight','sleep']

};

// 第一种浅拷贝的方法,直接复制

var obj2 = obj1;

// 第二种浅拷贝的方法,把obj1中的多有对象复制到obj2中

var obj3 = {};

function shallowCopy(obj, targetObj){

    for (const key in obj) {

        targetObj[key] = obj[key];

    }

}

shallowCopy(obj1, obj3);

console.log(obj3);// {name: "mimi", age: 2.5,like:["eat", "fight", "sleep", "haha"]}

console.log(obj1);// {name: "mimi", age: 2.5,like:["eat", "fight", "sleep", "haha"]}

obj1.like.push('haha');

console.log(obj3.like);//["eat", "fight", "sleep", "haha"]

深拷贝是另外一个对象开辟对应的空间,是两个不同的对象。

数组方法:slice、concat都是深拷贝。

JSON.parse(JSON.stringify(obj))

Object.assign()是一种可以对非嵌套对象进行深拷贝的方法,如果对象中出现嵌套情况,那么其对被嵌套对象的行为就成了普通的浅拷贝。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。