深拷贝和浅拷贝

值的类型

基本类型和对象

基本类型有六种: null,undefined,boolean,number,string,symbol
引用类型: 数组和对象

let a = { name: 'FE' }
let b = a
b.name = 'EF'
console.log(a.name) // EF

我们会发现,与值类型不相同的是,在赋值结束后,a的name属性也发生了改变

**值类型的赋值操作:**将变量的内容赋值给另外一个变量
**引用类型的复制操作:**赋值的是变量的指针或者地址

那么,如何让引用类型在赋值的时候也具有值类型一样的效果呢?
拷贝操作:
自己定义一个拷贝方法:

function copyobj(aru){
let newobj={};
for(let key in aru){
newobj[key]=aru[key];}
return newobj;}//浅拷贝方法

以上是浅拷贝的方法(只能作用到对对象的第一个层级)

**深拷贝:**如果被拷贝的对象,有一个参数是一个数组(另一个个引用类型)

**第三方工具库:**可以直接利用工具库定义好的方法【lodash】

js自带方法:
【实现浅拷贝】object.assign({},a)//将a中的内容拷贝一份到{}中
【实现深拷贝】JSON的虚拟化,然后反虚拟化 JSON.parse(JSON.stringify(a))//函数内容无法实现拷贝,会被丢弃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值