vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue项目中遇到的深拷贝浅拷贝

解读vue项目中遇到的深拷贝浅拷贝问题

作者:oilpastell

这篇文章主要介绍了vue项目中遇到的深拷贝浅拷贝问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue项目的深拷贝浅拷贝问题

遇到的问题

使用element-ui修改表单文本框的数据时,无论确定还是取消,页面数据都在同步修改

原因:

复杂类型的赋值是浅拷贝,直接赋值 会导致双向修改

解决的方法:

将浅拷贝转换成深拷贝

解决思路:

先把该对象转成字符串(普通数据类型), 就没有引用类型的影响了。再转回对象使用。

转换方式 :

JSON.parse(JSON.stringify(对象))

这里简述下深拷贝浅拷贝的概念

浅拷贝: 将A对象赋值给B对象,修改B对象的属性和方法会影响到A对象的属性和方法。

深拷贝 将A对象赋值给B对象,修改B对象的属性和方法不会影响到A对象的属性和方法。

vue深拷贝、浅拷贝的区别

1、浅拷贝

this.ProductionLineForm = {
    "produeLineName": "产线1",
	"departmentId": 1,
	"produceLineStatus": 0,
	"director": 5,
	"description": "测试产线",
	"keyCraftNodeId":1
}
let productionLineForm = this.ProductionLineForm;
productionLineForm.produeLineName = '修改名称'
console.info('this.ProductionLineForm', this.ProductionLineForm)

查看原form的值:

2、深拷贝

使用JSON.parse(JSON.stringify(要拷贝的对象))。

JSON.stringify()对象转为串,JSON.parse()串转为对象,JSON操作是深拷贝操作。

 this.ProductionLineForm = {
   "produeLineName": "产线1",
   "departmentId": 1,
   "produceLineStatus": 0,
   "director": 5,
   "description": "测试产线",
   "keyCraftNodeId": 1
}
let productionLineForm = JSON.parse(JSON.stringify(this.ProductionLineForm));
productionLineForm.produeLineName = '修改名称'
console.info('this.ProductionLineForm', this.ProductionLineForm)

查看原form的值:

对比发现,浅拷贝,在修改productionLineForm的参数时,原form也被修改。而深拷贝修改参数不会影响原form的值。

注意:

浅拷贝:新对象赋值,只是取的旧对象栈中的值,也就是引用对象的值

深拷贝:会在堆里边开辟一个空间,存放自己的对象值

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文