深浅拷贝

本文探讨了JavaScript中基本数据类型与对象数据类型的区别,以及浅拷贝(如Object.assign和扩展运算符)和深拷贝(通过JSON.stringify)的实现及其应用场景。理解这些概念有助于开发者避免意外共享内存和创建独立副本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据类型

数据分为基本数据类型(String,Number,Boolean,Null,Undefined, Symbol)和对象数据类型

基本数据类型的特点:直接存储在栈中

对象数据类型的特点:存储的是该对象在栈中的引用,真实的数据存放在堆内存中(栈中只存在对象的引用,真正的对象在堆中)

2.浅拷贝与深拷贝的区别

浅拷贝只复制某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存

深拷贝复制完整的对象,不共享内存空间

1.浅拷贝

方法一:Object.assign()

let a = {
    age : 1
}
let b = a
a.age = 2
console.log(b.age);

给变量b赋值一个对象a,可以发现a的值改变时b的值也会改变,因为两者的值会是同一个引用,但有时候我们不希望这样就需要想办法来解决

这里给出的方法是Object.assign,这个方法有两个参数target,source,将source拷贝给target,并返回该对象

Object.assign(target, ...sources)

 

let a = {
    age: 1
}
let b = Object.assign({},a)
a.age = 2
console.log(b.age)

 方法二: ...运算符

我们也可以通过展开运算符来解决

let a = {
    age: 1
}

let b = {...a}
a.age = 2
console.log(b.age)

2.深拷贝

通常浅拷贝已经能解决很多问题了,但是如果对象还包含有对象,我们上面的方法就要失效了

深拷贝我们需要通过JSON.stringify(object))

JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值