收藏
回答

这样的操作为什么能直接修改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)
 
      },
 
   
})


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

7 个回答

  • hugo
    hugo
    2020-05-09

    引用数据类型,你赋值的时候赋的是一个地址值,指向的是同一个对象啊

    2020-05-09
    有用
    回复
  • 原点的原点
    原点的原点
    2019-08-05

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

    2019-08-05
    有用
    回复
  • 星星海
    星星海
    2019-08-04

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

    2019-08-04
    有用
    回复
  • 鲤子
    鲤子
    2019-08-04

    浅拷贝跟深拷贝的问题

    2019-08-04
    有用
    回复 2
    • ネф イω
      ネф イω
      2019-08-04
      我怎么看你好熟悉
      2019-08-04
      回复
    • 鲤子
      鲤子
      2019-08-04回复ネф イω
      黑人问号???
      2019-08-04
      回复
  • ネф イω
    ネф イω
    2019-08-04

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

    2019-08-04
    有用
    回复
  • G-STEPS街舞工作室
    G-STEPS街舞工作室
    2019-08-04

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

    2019-08-04
    有用
    回复
  • Y
    Y
    2019-08-04

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

    2019-08-04
    有用
    回复 2
    • ネф イω
      ネф イω
      2019-08-04
      这不是打印的问题,我没有使用setData,而 test 里b变成3了
      2019-08-04
      回复
    • ネф イω
      ネф イω
      2019-08-04
      这里操作t变量就等同于 this.data.test.b=3
      2019-08-04
      回复
登录 后发表内容