工作随记work

技术相关

联系我们

联系人:祁海涛

手 机:13212709526

邮 箱:527845769@qq.com

网 址:ddwl.site

地 址:湖北省武汉市青山区白玉山街道

uniapp深度拷贝问题,php里叫作引用,今天碰到这个坑了

时间:2024-05-24 08:24 阅读:23 来源:互联网

问题是这样的,今天在作乐美追光计划小程序碰到的,因为表单reset的bug导致表单无法重置,至于具体原因,死活找不到,反正就是用不了,度娘也没法,只能变相的定义一个表单空值,在重置时给赋上,这样出了一个问题,第一次这样操作是可以的,第二次就出状况了,这个空值居然也被改变了,这个有点像是vue的写法,后面改了,前面定义的也给改掉了,只要是=号,就直接改,查了下资料,php是不存在这样的问题的,js里这样的叫作深度拷贝,用json,parse转义一次就不会有这种情况

把a变量赋值给b变量,b变量修改后a变量也随之改变

	var list = [{						days: '2023-05-01',						active: false,
					},
					{						days: '2023-05-02',						active: false,
					},
				]				let data_info = this.data_info
                console.log(list[0].active+'------------------test1')				let a=list
				a[0].active=true
				let b=list                console.log(list[0].active+'------------------test2')

打印结果如下
13:35:45.810 false------------------test1 at components/calen.vue:139
13:35:45.814 true------------------test2 at components/calen.vue:143
明显只修改了a变量 但是list变量却也变化了。就这么个简单问题,但是不知道为啥 困扰好久了。

已经知道怎么回事了
大致原因是:在js里,字符串、数字、布尔、这种称为基础类型是可以直接赋值的,即使是修改后也不会影响原来的数据。但是引用类型比如object,array这种就会出现上面描述的问题。现在发现自己理论好差。

解决方法:var arr1= JSON.parse(JSON.stringify(arr1));


Copyright © 2023  东东网络工作室 版权所有  备案号:鄂ICP备2020021332号-1 网站地图