微信小程序 通过setData 给两个变量设置同一个数组时,为什么修改一个变量,另一个会也被修改?

在微信小程序中,使用 setData 方法更新数据时,如果给两个变量设置同一个数组,修改其中一个变量的值会导致另一个变量也被修改的原因是,数组是引用类型的数据,在内存中的存储方式是按引用地址存储。

当你将一个数组赋值给两个变量时,实际上两个变量共享同一块内存空间,即它们引用相同的地址。因此,无论你修改其中一个变量的值,另一个变量也会受到影响。

示例如下:

javascript 复制代码
// 在 Page 实例的 data 中定义两个变量
data: {
  array1: [1, 2, 3],
  array2: []
},

// 将 array1 赋值给 array2
onLoad: function() {
  this.setData({
    array2: this.data.array1
  });
},

// 修改 array1 的值
modifyArray: function() {
  this.data.array1.push(4);
  this.setData({
    array1: this.data.array1
  });
  console.log(this.data.array2);
  // 输出 [1, 2, 3, 4],array2 也被修改了
}

通过以上示例,当我们调用 modifyArray 函数更新 array1 变量的值时,array2 的值也会受到影响,因为它们引用同一块内存地址上的数组。

如果想要避免这种情况,可以使用 array.slice() 方法复制一份原数组并赋给另一个变量,这样就不会导致修改一个变量时影响到其他变量的问题。

javascript 复制代码
// 使用 array.slice() 方法复制数组
onLoad: function() {
  this.setData({
    array2: this.data.array1.slice()
  });
}

通过上述方式,array1array2 将引用不同的内存地址上的数组,因此修改其中一个变量的值不会影响到另一个变量。

相关推荐
恩创软件开发5 小时前
创业日常2026-1-8
java·经验分享·微信小程序·小程序
腾讯云云开发13 小时前
微信发布AI小程序成长计划:免费云开发资源+1亿token额度!
微信小程序·ai编程·小程序·云开发
开发加微信:hedian11613 小时前
推客与分销场景下的系统架构实践:如何支撑高并发与复杂业务规则
小程序
游九尘15 小时前
在小程序中实现横竖屏切换的配置方法,实时监听页面宽度
小程序
weixin_lynhgworld15 小时前
[特殊字符]旧物焕新颜,二手变宝藏——小程序系统开发开启绿色生活新篇章[特殊字符]
小程序·生活
说私域15 小时前
小程序电商运营中“开源AI智能名片链动2+1模式S2B2C商城小程序”对培养“老铁”用户的重要性研究
人工智能·小程序·开源
00后程序员张15 小时前
在 iPhone 上进行 iOS 网络抓包的实践经验
android·ios·小程序·https·uni-app·iphone·webview
weixin_lynhgworld15 小时前
[特殊字符]短剧小程序:解锁碎片时间,畅享无限娱乐[特殊字符]
小程序·娱乐
2501_9159184115 小时前
介绍如何在电脑上查看 iPhone 和 iPad 的完整设备信息
android·ios·小程序·uni-app·电脑·iphone·ipad
2501_9160088915 小时前
没有 Mac 如何在 Windows 上创建 iOS 应用描述文件
android·macos·ios·小程序·uni-app·iphone·webview