收藏
回答

重启小程序后,新元素无论 push 或是 unshift 都会同时更新原数组第一个元素内容!!

问题模块 框架类型 问题类型 操作系统 工具版本
开发者工具 小程序 Bug Windows 1.02.1912172

【前提】第一次使用小程序数据更新正常,异常出现在刷新小程序后。

1、首先小程序 onLaunch 时读取缓存数据,并存储在 globalData 命名为 storage。

2、app.js 有公共方法(updatData)将 新元素 push(unshift) 到 storage。

3、按理说 元素应该如第一次使用时,正常将元素添加到 storage 的最后面(或者最前面)!!神奇的是,无论是 push 还是 unshift 方法都会改变原始 storage 数组中的第一个元素!!!!


断点调试无数次,编辑器和真机亦是如此。


深度怀疑这其中有个隐藏BUG!


排查的问题代码(位置:app.js ):


运行打印如下:【注意】添加的新元素对象内容是完全跟历史 storage数组中的元素是不同的,所以不会进入更新内容的条件,只会 push 新元素。但打印的结果却并不是这样

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

1 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-12-19

    弄个代码片段吧

    2019-12-19
    赞同
    回复 8
    • 皓月
      皓月
      2019-12-19
      https://developers.weixin.qq.com/s/gtsBjJmV7udm


      分享BUG啦~


      BUG定位在app.js 的 updatData 函数内哦!感谢查阅
      2019-12-19
      回复
    • sheng
      sheng
      2019-12-19回复皓月
      在app.js的onLaunch里面
      获取第一个元素nowData是指向storage[0]的,修改nowData也会改变stroage的值的
      2019-12-19
      2
      回复
    • 皓月
      皓月
      2019-12-19回复sheng
      非常感谢,根据您的指导。问题已经解决!
      但是还是有一些疑问,onLaunch 函数在整个过程中只调用一次。然而却在后续操作中会影响到相关参数的赋值,这个能否赐教一下
      2019-12-19
      回复
    • sheng
      sheng
      2019-12-19回复皓月
      是深拷贝和浅拷贝的问题,上网去搜索看看
      2019-12-19
      回复
    • 皓月
      皓月
      2019-12-19回复sheng
      好的,非常感谢您。我会认真去学习和巩固的
      2019-12-19
      回复
    查看更多(3)
登录 后发表内容
问题标签