JS - 深拷贝与浅拷贝

参考博客:深拷贝与浅拷贝的区别,实现深拷贝的几种方法

拷贝,也可以理解为变量的复制。假设B复制了A,当A发生变化,B也跟着变化,这种称为浅拷贝;当A发生变化,B不发生变化,这种称为深拷贝

基本数据类型的拷贝(深拷贝)

let a = 1
let b = a
b = 2
console.log(a) // 1 未发生变化

对象的拷贝(浅拷贝)

let A = { num: 1 }
let B = A
console.log(A === B) // true
B.num = 2
console.log(A) // { num: 2 } 发生变化

对象的拷贝(深拷贝)

let A = { num: 1 }
let B = JSON.parse(JSON.stringify(A))
console.log(A === B) // false
B.num = 2
console.log(A) // { num: 1 } 未发生变化

数组的拷贝(浅拷贝)

let a = [[1, 2]]
let b = a
console.log(b === a) // true
b[0][0] = 0
console.log(a) // [[0, 2]] 发生变化

// es6扩展运算符(...)只能深拷贝一维数组,对于二维以上的数组仍是浅拷贝
let a1 = [[1, 2]]
let b1 = [...a] 
console.log(b1 === a1) // false
b1[0][0] = 0
console.log(a1) // [[0, 2]] 发生变化

数组的拷贝(深拷贝)

let a = [[1, 2]]
let b = JSON.parse(JSON.stringify(a))
console.log(a == b) // false
b[0][0] = 0
console.log(a) // [[1, 2]] 未发生变化

注意:数组拷贝 concat()slice() 拷贝不彻底都不是深拷贝(深拷贝是拷贝对象各个层级的属性,concat与slice都只能拷贝数组第一层数据)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值