关于js里面的深浅拷贝个人见解

1. 为什么会有深浅拷贝这种概念

说到深浅拷贝的概念,就得提到js里面数据的数据类型,js里面数据类型可以分为如下:Number(数值型)、String(字符串)、Boolean(布尔型)、Object(对象,object和array都属于Object类型)、null、undefined
其中Number(数值型)、String(字符串)、Boolean(布尔型)、null、undefined 可以 又可以称为基础数据类型,在内存中,存放于栈内存中.
而Object(对象,object和array都属于Object类型)又可称为引用数据类型,在内存中,存放于堆内存中。我们常用的声明一个d为对象/数组引用类型,其实只是在栈内存里面声明这个d的指针指向,这个指针指向了堆里面的某个内存。如下图
**我们说的深浅拷贝都是针对于引用类型,对象和数组,基础数据类型的操作,可以统统认为是深拷贝**
let d = {name: 'd'}
let a = 123445
let b = 'asdasd'
let c = null
let e = undefined
let f = true

在这里插入图片描述

2. 深浅拷贝的概念

深拷贝:对javascript引用类型数在堆内存中重新开辟了一块内存用于保存变量的值,常用的方法有JSON.parse(JSON.stringify())(该方法有一定局限性,如果对象的属性值是函数时候会有问题),jq的extend,loadsh的cloneDeep,
浅拷贝:浅拷贝就是引用类型数据相互赋值之后,例obj1=obj2;如果后面的操作中修改obj1或者obj2,这个时候数据是会进行相应的变化的,因为在内存中引用类型数据是存储在堆内存中,堆内存中存放的是引用类型的值,同时会有一个指针地址指向栈内存,两个引用类型数据地址一样,如果其中一个发生变化另外一个都会有影响

  • 因为工作较忙,后续持续更新中,如有错误请各位大佬斧正
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值