js深拷贝

新创建的对象为newObj,源对象为oldObj,一行代码搞定:
0.structuredClone()
const obj = {id: ‘abcd1234’, values: [‘a’, ‘b’]};
const clone2 = structuredClone(obj);

1、利用JSON(推荐,JS语言自支持,不需要依赖其他工具)

let newObj = JSON.parse(JSON.stringify(oldObj))

2、flat
var arr = [1,2,[3,[4,[5,6]]]]
var arr2 = arr.flat(0) //默认是1,展平是Infinty
arr2 === arr // flase

let newObj = _.cloneDeep(oldObj)
3、ES6的对象拓展运算符:…(有坑,慎重使用,参考关于ES6的拓展运算符进行深拷贝)

4.es6的 Array.from(oldarr)

let newObj = {…oldObj}
5、ES6的对象拓展运算符:Object.assign()(有坑,同上)

let newObj = Object.assign({}, oldObj)

6、Lodash(推荐,在某些集成了Loadsh的开发环境代码显得更简洁)

不能深拷贝的:
展开运算符
var a = [[1], [2], [3]];
var b = […a];
a[0] === b[0] // true
b[1].push(11)
b[1] // [2, 11]
a[1] // [2, 11]

flat也一样
var c = flat(0)
c[0].push(11)
c[0] // [1, 11]
b[0] // [1, 11]

用扩展运算符对数组或者对象进行拷贝时,只能扩展和深拷贝第一层的值,对于第二层极其以后的值,扩展运算符将不能对其进行打散扩展,也不能对其进行深拷贝,即拷贝后和拷贝前第二层中的对象或者数组仍然引用的是同一个地址,其中一方改变,另一方也跟着改变。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值