【js踩坑之路】复制变量值的具体用法

问题描述:

在VUE中,设置了this.a = this.b(b为object类型),input中使用v-model绑定了this.a,发现在改变a的值后,b的值也会跟着改变。经查询,是由于不清楚js中复制变量值的具体用法,从而引发的问题。

复制变量值

从一个变量向另一个变量复制值的操作。在上述操作中,this.a = this.b的操作就是复制变量值。

复制变量值包括两种操作,一种是复制基本类型值、另外一种是引用类型值

1.复制基本类型值

在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。两个相互操作无影响。

// 基本类型
let a = 3;
let b = a;
b = 4;
console.log(b);  // 4
console.log(a);  // 3

2.复制引用类型值(Object、Array)

将存储在变量对象中的值复制一份到为新变量分配的空间中。引用类型值是保存在堆内存中的对象, 所以,新旧两个对象指向同一个对象。一个变量的值改变后会对另外一个变量造成影响。

// 引用类型
let c = {
	name: 'test1',
	age: '13'
};
let d = c;
d.name = 'test2';
console.log(d.name);  // test2
console.log(c.name);  // test2

那如果如何实现复制一个object类型的值,但又不改变它的值呢?这里又引出了object类型的浅拷贝深拷贝

浅拷贝

浅拷贝为复制了对象的引用地址,新旧两个对象指向同一个内存地址。

复制的是对象的引用,而不是对象本身,比如this.a = this.b

深拷贝

深拷贝是把对象的引用以及对象本身都复制过来。两个对象修改其中任意的值另一个值不会改变。

例:

this.a = Object.assign({}, this.b);

this.a = {...this.b};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值