认识js中浅拷贝和深拷贝的区别

js中浅拷贝和深拷贝的理解

js中拷贝是一种现象,要想明白拷贝必须要先知道赋值。

  1. 赋值:是把一个“基本数据”或者“对象数据”交给一个变量的过程;
//a. 基本数据赋值;两个值互不影响-->值
        let a = 10
        let b = a
       a = 20
        console.log(b);
//b. 引用类型:两个值互相影响 -->址>         
       let a = {
            age: 1
        }
        let b = a
        a.age = 2
        console.log(b);

由此引出拷贝,只存在于引用类型(对象数据)

  1. 拷贝:就是开辟新空间,把原始对象source的每个键交给另外一个对象target
    浅拷贝: 只赋值数据的第一层
    特点: 如果第一层是基本数据类型,互不影响,如果第一层是应用类型,互相影响。
    实现 浅拷贝代码如下
let a = {
           age: 1,
           book: {
               price: 100,
               name: '兔子'
           }
       }

       // 1. 第一种写法-> Object.assign((),source)
        let b = Object.assign({}, a)
        a.age = 2
        a.book.price = 200
        console.log(a, b);

       // 2. 第二种写法->spread ...obj || ...array
       // let b = {
       //     ...a
       // }
       // a.age = 2
       // a.book.price = 200
       // console.log(a, b);


       // 3. 第三种-> slice
       // const temp = [1,2,3].slice(0)
       // let arr = [1, 2, [10, 20]]
       // let b = arr.slice(0)
       // arr[0] = 3
       // arr[2][0] = 100
      // console.log(arr, b);

深拷贝 :动态分配内存空间,把浅拷贝进行层层递归。
特点: 如果是基本数据类型,互不影响,如果是引用类型,互不影响。
实现深拷贝代码如下:

	let a = {
		age: 1,
		book: {
			price: 100,
			name: '兔子'
		}
	}
// 使用; JSON.parse()  JSON.stringify() -->可以深拷贝数组和对象
	let b = JSON.parse(JSON.stringify(a))
	a.age = 2
	a.book.price = 200
	console.log(a,b);
  1. 小结:
    赋值 --> 拷贝:
    基本数据类型:拷贝的值互不影响。
    引用数据类型: 拷贝的值互相影响。
  • 由此得出拷贝是一种现象,只存在于引用数据类型赋值的过程中,
    根据互相影响的多深,得出来浅拷贝和深拷贝。
    浅拷贝的特点
    引用类型赋值互相影响,但是只影响第一层的数据;
    如果第一层是基本数据类型互不影响;
    如果第一层是引用数据类型互相影响。
    浅拷贝的使用
    obj.assign( {}, 要拷贝的对象或数组 )
    …array || …obj 展开运算符
    array || obj.slice(0)
    深拷贝的特点
    把浅拷贝进行递归操作 --> 动态分配内存空间,把浅拷贝进行层层递归;
    如果是基本数据类型,互不影响;
    如果是引用数据类型,互不影响。
    深拷贝的使用
    JSON.parse(JSON.stringify(a)),专业术语;序列化和反序列化
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Friday--星期五

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

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

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

打赏作者

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

抵扣说明:

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

余额充值