无锡小王子
无锡小王子
  • 发布:2021-08-12 16:25
  • 更新:2021-08-13 08:54
  • 阅读:538

【报Bug】局部变量 ,数组push ,unshift等操作,导致数组数组发生相同的变化

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 11.5.1

HBuilderX类型: 正式

HBuilderX版本号: 3.1.22

手机系统: 全部

手机厂商: 苹果

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

苹果8p 小米11pro 谷歌浏览器

示例代码:

let aa = [];
let ab = [];
//评论回复体
aa = that.detail.circleComment.comments;
//该值为前端回复评论所需要的对象体,包含content,id,等字段
let ac ={};
ac = that.commitForm;
//插入
aa.unshift(ac);
//回填
that.detail.circleComment.comments = aa;

依次输入 {content:1},{content:2} ,{content:3},{content:4}
结果始终依次为
1
2,2
3,3,3
4,4,4,4

根据网络中别人给的解释:说明多次操作 指向的始终是同一个内存地址;

操作步骤:

let aa = [];
let ab = [];
aa = that.detail.circleComment.comments;
let ac ={};
ac = that.commitForm;
aa.unshift(ac);
that.detail.circleComment.comments = aa;

预期结果:

输入 1 ,2 ,3,4
结果应该为 1,2,3,4

实际结果:

输入 1 ,2 ,3,4
结果始终依次为
1
2,2
3,3,3
4,4,4,4

bug描述:

使用 push ,unshift进行数组填充时候,每次都会覆盖上一次的数据,与https://blog.csdn.net/xiaoye319/article/details/78416762?utm_source=blogxgwz2 类似,

实际开发过程中,不管如何使用let var 等变量进行定义,新建 都始终指向一个地址,导致每次添加,都会添加的数值始终一样。

2021-08-12 16:25 负责人:无 分享
已邀请:
无锡小王子

无锡小王子 (作者)

经过多次实践后,发现
ac = that.commitForm;

会将data中的commitForm 内存复制到变量中,应该改成单个赋值。
ac.某变量 = that.commitForm

该问题目前已经被锁定, 无法添加新回复