Object.assign 是深拷贝还是浅拷贝?

目录

如何区分深拷贝与浅拷贝

 第一级属性深拷贝,以后级别属性浅拷贝

怎样才是严谨的深拷贝?

 

如何区分深拷贝与浅拷贝

简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。 

 第一级属性深拷贝,以后级别属性浅拷贝

let a = {name: {asd: '123'}};
let b = Object.assign({}, a);
a = {w: []};
console.log(a); // w: []

let m = {name: {asd: '123'}};
let n = Object.assign({}, m);
m.name = [];
console.log(n); // name: {asd: "123"}

let x = {name: {asd: '123'}};
let y = Object.assign({}, x);
x.name.asd = 456;
console.log(y); // name: {asd: 456}

let p = {name: {asd: {xyz: '123'}}};
let q = Object.assign({}, p);
p.name.asd.xyz = 456;
console.log(p); // name: asd: {xyz: 456}

怎样才是严谨的深拷贝?

严谨是一个相对概念,深拷贝的写法也有N种,我个人是采用3种办法,一个是JSON.parse(JSON.stringify(obj)),一个是去github上找一个深拷贝的开源代码,或者是使用lodash的深拷贝就得了。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值