唯品秀前端博客
当前位置: 前端开发 > JavaScript > JS数组中的一个元素的值改变后,数组其它元素值都跟着变了

JS数组中的一个元素的值改变后,数组其它元素值都跟着变了

2020-04-10 分类:JavaScript 作者:管理员 阅读(641)

今天写代码时候想自己写点假数据,然后将一个数组的一项各种循环添加,因为想每条数据多少有点区别,所以单独把某些数据push完后单独改变某些值,结果发现,数组其它元素值都跟着变了。初次发现这个问题真的很诡异,一头雾水,超出了认知,自己尝试各种demo找了很久才找到根源,最后发现,还是在认知之内,只不过换了一种玩法,大脑短路了,如下示例代码

示例代码

1
2
3
4
5
6
7
8
9
10
11
var d = [
  {
    a: 1
  },
  {
    a: 2
  }
];
d.push(d[0]);
d[2].a = 100;
console.log(d);

上述代码你能想象下结果应该是多少么?正常情况我们可能想到或者说想得到的结果是:

1
[[{a:1},{a:2},{a:100}]]

而实际让我来告诉你,结果是:

1
[{a:100},{a:2},{a:100}]

不知道你这时候会不会感觉诧异呢?

解决方式

1
2
3
4
5
6
7
8
9
10
11
12
13
var d = [
  {
    a: 1
  },
  {
    a: 2
  }
];
d.push(d[0]);
var arryNew = JSON.parse(JSON.stringify(d));
arryNew[2].a = 100;
this.d = arryNew;
console.log(d);

小结

这个问题其实还是基础问题,只是之前没这么玩过,一时诧异的很。归根究底就是因为数组是引用类型,你从原数组抠出来的对象然后通过push复制插入到原数组中,那么这两个对象指向的是同一个地址,所以改变其中一个就会改变另一个

「三年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(4) 打赏

谢谢你请我吃鸡腿*^_^*

支付宝
微信
4

谢谢你请我吃鸡腿*^_^*

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

3 条评论关于"JS数组中的一个元素的值改变后,数组其它元素值都跟着变了"

  1. 若如初见 Mac OS X Safari 600.1.25

    很受益

  2. 春江花月夜 Mac OS X Safari 600.1.25

    文章很不错

  3. 特价开心药 Windows 7 Firefox 75.0

    基础的js教程,可以

博客简介

唯品秀博客: weipxiu.com,一个关注Web前端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,愿景:成为宇宙中最具有代表性的前端博客,期待您的参与,主题源码 

精彩评论

  • 江吟辞(1周前 (06-29))

    好难坚持啊,我还没毕业,不知道啥时候才能像您一样厉害

    评:碎言碎语
  • 和我、恋爱吧(1周前 (06-29))

    怎么没见你更新呢,比较忙吗

    评:碎言碎语
  • 游离(1周前 (06-29))

    站主,你好!请教一下,前台的pc 端和移动端,你是怎么实现响应式的呢?媒体查询的同时写两套样...

    评:碎言碎语
  • 권지용(1周前 (06-29))

    最近在学习前端,看了博主很多文章,收益匪浅,感谢大佬

    评:碎言碎语
  • 白君也(1周前 (06-28))

    哇 自己制作的吗 在哪学的技术啊 好厉害

    评:碎言碎语
  • 管理员(3周前 (06-16))

    时间区间问题,因为目前是2020年,你所选不可能超出这个时间吧,当然,代码是根据你的业务来,...

    评:js时间戳完美转换成阴历农历格式

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

站点统计

  • 文章总数: 258 篇
  • 草稿数目: 0 篇
  • 分类数目: 16 个
  • 独立页面: 6 个
  • 评论总数: 902 条
  • 链接总数: 17 个
  • 标签总数: 459 个
  • 注册用户: 8220 人
  • 访问总量: 9212932 次
  • 最近更新: 2020年7月3日
服务热线:
 173xxxx7240

 QQ在线交流

 旺旺在线