收藏
回答

数组展开前后内容不一致?


展开前id是11

展开后变成了16

回答关注问题邀请回答
收藏

2 个回答

  • 金煜峰
    金煜峰
    2021-08-08

    展开前是打印时候的值,展开的时候会再读取一次值,如果在打印之后修改了这个值就会导致展开时不一样

    2021-08-08
    有用 1
    回复 4
    • 💤MY
      💤MY
      发表于移动端
      2021-08-08
      为什么会被改掉呢,我不知道问题出在哪
      2021-08-08
      回复
    • 金煜峰
      金煜峰
      2021-08-08回复💤MY
      object 是引用类型,你在循环里用 var newMarker = marker 引用的都是同一个对象,该对象循环结束后 id 被修改为 14+2=16;你可能需要深度拷贝一下,用 var newMarker = JSON.parse(JSON.stringify(marker)) 或者 var newMarker = Object.assign({}, marker)
      2021-08-08
      回复
    • 💤MY
      💤MY
      发表于移动端
      2021-08-08
      谢谢,我试一下,但理论上讲,在newmarker的值还没有被覆盖的时候,就已经通过push添加到markers数组中了,markers中的id应该是3.4.5...16,实际上打印出来却是16.16.16...(苦笑)
      2021-08-08
      回复
    • 金煜峰
      金煜峰
      2021-08-08回复💤MY
      var newMarker = marker 是浅拷贝,markers 中所有的 marker都指向同一个内存地址,所以值都是一样的,深度拷贝会创建不同的副本,就不会相互影响
      2021-08-08
      回复
  • Chauncy
    Chauncy
    发表于小程序端
    2021-08-08

    都是11啊,你是不是看花了

    2021-08-08
    有用 1
    回复
登录 后发表内容