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

发布于 6 年前作者 zyuan7141 次浏览最后编辑 6 年前来自 issues

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)
 
      },
 
   
})
6 回复
ping09
ping091 楼6 年前

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

yifang
yifang2 楼6 年前

浅拷贝跟深拷贝的问题

suyang
suyang3 楼6 年前

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

zyuan
zyuan4 楼6 年前

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

jie03
jie035 楼6 年前

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

liaomin
liaomin6 楼5 年前

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