浅拷贝 和 深拷贝

1、对于基本数据类型来说,是没有浅拷贝和深拷贝之分的;浅拷贝和深拷贝只针对引用数据类型
2、浅拷贝:假设B复制了A,当修改A时,如果B也跟着变了,说明这是浅拷贝
3、深拷贝:假设B复制了A,当修改A时,如果B没有跟着变,说明这是深拷贝

深拷贝的实现方法:

方法一:
var a = {
		name: "tm",
	    sex: "女"
    }
    
//扩展运算符 
//如果只是一层数组或是对象,其元素只是简单类型的元素,那么属于深拷贝(就是一层拷贝,暂时就理解为深拷贝吧!!!!)
var b = {...a}

//修改a的name
a.name = "小小"

console.log(b)  //{name: 'tm', sex: '女'}
//打印b,发现b的name并没有改变
方法二:
var test1 = [1,2,3,4,5]

//json的方法
var result1 = JSON.parse(JSON.stringify(test2))

//修改test1的第一个值
test1[0] = 9

console.log(result1)   //(5) [1, 2, 3, 4, 5]
// 打印result1,发现result1并没有改变
方法三:
var a = {
		name: "tm",
	    sex: "女"
    }
var test2 = {
		天空: "blue",
		叶子: "green"
	}
	
//extend方法
//true:true为深拷贝,false为浅拷贝
//{}: 复制到一个目标对象中
//test2,a: 被复制的对象们
var result = $.extend(true,{},test2,a)

test2.天空 = "红色"

a.sex = "男"

console.log(result)   // {天空: 'blue', 叶子: 'green', name: 'tm', sex: '女'}
打印result,发现result并没有改变

浅拷贝的实现方法:
一般就是 赋值运算符(=)

在这里插入图片描述

            //浅拷贝
            this.sendPrizeList = this.prizeList
            this.sendPrizeList.shift()

this.sendPrizeList 和this.prizeList都是数组,是引用数据类型。直接“=”赋值时(如上图)是浅拷贝,相当于将this.sendPrizeList 和this.prizeList的指针指向同一个对象,所以当this.sendPrizeList修改时,this.sendPrizeList 也会改变(此处相当于也执行了this.sendPrizeList .shift()。)

			//深拷贝
            this.sendPrizeList =  JSON.parse(JSON.stringify(this.prizeList));
            this.sendPrizeList.shift()

深拷贝相当于将 this.prizeList指向的对象又复制了一份,然后将this.sendPrizeList的指针指向新复制的对象,所以此时改变this.sendPrizeList指向的对象时,this.prizeList指向的对象不受影响(即this.sendPrizeList.shift()不会改变this.prizeLi数组)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值