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

这篇具有很好参考价值的文章主要介绍了微信小程序 通过setData 给两个变量设置同一个数组时,为什么修改一个变量,另一个会也被修改?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

示例如下:

// 在 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() 方法复制一份原数组并赋给另一个变量,这样就不会导致修改一个变量时影响到其他变量的问题。

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

通过上述方式,array1array2 将引用不同的内存地址上的数组,因此修改其中一个变量的值不会影响到另一个变量。文章来源地址https://www.toymoban.com/news/detail-680177.html

到了这里,关于微信小程序 通过setData 给两个变量设置同一个数组时,为什么修改一个变量,另一个会也被修改?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序this.setData给对象&数组动态赋值

    1. 固定属性赋值 wxml:  js: 这个时候页面上显示的是 hellow 当我们修改的时候有2种方案 2.动态属性赋值 wxml: js: 修改数组里对象的属性 通过es6模版字符串 `` 的方式 key 可以作为变量 wxml:  js: 循环修改 3.双向数据绑定 经过多次尝试提交 获取到的formData.title数据为空,据说加上

    2024年01月19日
    浏览(46)
  • 微信小程序通过js动态修改css样式的方法,以及css变量

    不知道各位小帅有没有遇到这种问题,在微信小程序开发的时候,我们想要将某个文字大小变大,那么本篇文章就是解决这个问题。

    2024年02月06日
    浏览(53)
  • 微信小程序中this.data 和 this.setData

    在微信小程序中,this.data 和 this.setData 是两个用于处理数据的不同方式。 1、this.data:this.data 是一个对象,用于存储小程序页面的数据。当我们需要获取或修改页面的数据时,可以直接访问和操作 this.data 对象。例如,this.data.name 可以获取名为 name 的数据,this.data.name = ‘Jo

    2024年02月03日
    浏览(51)
  • 微信小程序this.setData修改对象、数组中的值

    在微信小程序的[前端开发]中,使用this.setData方法修改data中的值,其格式为: 需要注意的是,如果是简单变量,这里的参数名可以不加引号。 经过测试,可以使用3种方式对data中的对象、数组中的数据进行修改。 假设原数据为: 方式一: 使用字符串,例如: 方式二: 构造

    2024年02月10日
    浏览(52)
  • 微信小程序this.setData()对单个属性值、对象、数组的使用

     单个属性值: 第一种写法:直接写单个属性值  第二种写法:数组形式的字符串单个属性值  对象: 第一种写法:字符串写对象  第二种写法:数组形式的字符串写对象   数组: 第一种写法:字符串写数组  第二种写法:数组形式的字符串写数组

    2024年02月06日
    浏览(48)
  • 微信小程序使用setData修改数组中的指定下标的属性值

    因为小程序中分有逻辑层和渲染层等。所以需要用setdata函数,渲染到视图界面。普通的修改属性是通过 this.setData({aa:true}) 的方法设置,但是本人遇到一种情况,需要通过下标区改变数组某一项中的某属性的值,方法如下: 结构: js: 备注:通过 let checkProp = \\\"rightRoomList[\\\" +

    2024年02月15日
    浏览(41)
  • 【微信小程序错误】TypeError: Cannot read property ‘setData‘ of undefined

    在使用微信小程序的时候,遇到了这么个问题。告诉你setData未找到! 代码段中,我们可以看到,直接使用了this,这里的this获取到的内容出现了问题。上段代码中我们可以看到此处的this获取到的是undefined。 只要将此处的undefind解决掉就可以。 这样就搞定了。将this提前获取到

    2024年02月10日
    浏览(76)
  • 微信小程序页面交互综合练习 (重点:解决“setData of undefined”报错问题)

    (1)首先,我需要在vscode里面创建一个简易的node.js服务器 (2)然后,需要在微信小程序开发工具的index.wxml里写一个注册表单 页面如下: (3)最后在index.js里面给绑定的函数写上执行代码: (4)代码运行结果: 我在vscode中运行创建服务器代码 当我填好表单数据点击提交

    2024年04月17日
    浏览(75)
  • 微信小程序错误-TypeError: this.setData is not a function

    微信小程序在与后台获取数据的时候遇到: TypeError: this.setData is not a function错误。 产生原因: 输出结果能输出,会产生警告,原因是this不能直接在请求的回调函数里写this, 解决方法:     在请求外声明一个变量,接收onload函数的this。  

    2024年02月16日
    浏览(48)
  • 微信蓝牙小程序,连接蓝牙模块收发数据。遇到的问题:我连接成功之后发现服务值下面两个特征值一个只能读一个只能写,然后点击读的那个一直收到同一个字,点击发送无论发什么内容只能收到同一个中文字,求指导

    大家好,我是小程序初学者,目前尝试做一个蓝牙小程序连接蓝牙模块进行收发数据,遇到了问题求大佬指点 这是代码运行结果:点击能读的特征值就会接收到耀这个字,点击输入框无论发送什么都会接收到肀这个字 遇到的问题:我连接成功之后发现服务值下面两个特征值

    2024年01月16日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包