收藏
回答

这样的操作为什么能直接修改data里的数据?


Page({

  data: {

        test:{ a:1, b:2 }

    },


onLoad: function (options) {

              let t=this.data.test;

              t.b=3

     },

})



为什么AppData(下图) test里的b是3?

这是什么原因, 望告知~


结贴:这是我要的

Page({
 
    data: {
        test:{ a:1, b:2 }
      },
 
    onLoad: function (options) {
        let t=this.data.test,
        k = JSON.parse(JSON.stringify(t))
        k.b=3
      
 
      console.log(t,k)
 
      },
 
   
})


最后一次编辑于  08-04
回答关注问题邀请回答
收藏

6 个回答

  • 爆竹声中一岁除
    爆竹声中一岁除
    08-05

    this.data.test这不是赋值了?

    08-05
    赞同
    回复
  • 星星海
    星星海
    08-04

    没函数的话试试这个JSON.parse(JSON.stringify(XXXX))

    08-04
    赞同
    回复
  • 鲤子
    鲤子
    08-04

    浅拷贝跟深拷贝的问题

    08-04
    赞同
    回复 2
    • Vagrant
      Vagrant
      08-04
      我怎么看你好熟悉
      08-04
      回复
    • 鲤子
      鲤子
      08-04回复Vagrant
      黑人问号???
      08-04
      回复
  • Vagrant
    Vagrant
    08-04

    结贴:无满意回答 ,执行数组拷贝,单独赋值 即可实现操作t变量且不影响data 数据

    08-04
    赞同
    回复
  • G-STEPS街舞工作室
    G-STEPS街舞工作室
    08-04

    可以直接设置 this.data 的值,只是如果不调用 setData 方法,数据改变了页面不会刷新

    08-04
    赞同
    回复
  • Y
    Y
    08-04

    加载后你data里面你设置修改data.b=3了他就打印3

    08-04
    赞同
    回复 2
    • Vagrant
      Vagrant
      08-04
      这不是打印的问题,我没有使用setData,而 test 里b变成3了
      08-04
      回复
    • Vagrant
      Vagrant
      08-04
      这里操作t变量就等同于 this.data.test.b=3
      08-04
      回复