共 3 条评论关于"JS数组中的一个元素的值改变后,数组其它元素值都跟着变了"
最新评论
今天写代码时候想自己写点假数据,然后将一个数组的一项各种循环添加,因为想每条数据多少有点区别,所以单独把某些数据push完后单独改变某些值,结果发现,数组其它元素值都跟着变了。初次发现这个问题真的很诡异,一头雾水,超出了认知,自己尝试各种demo找了很久才找到根源,最后发现,还是在认知之内,只不过换了一种玩法,大脑短路了,如下示例代码
1 2 3 4 5 6 7 8 9 10 11 |
上述代码你能想象下结果应该是多少么?正常情况我们可能想到或者说想得到的结果是:
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复制插入到原数组中,那么这两个对象指向的是同一个地址,所以改变其中一个就会改变另一个
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」
最新评论
路过,顺便点赞
评:Node+Browsersync省时的浏览器同步测试热加载工具大佬,啥名了都会
评:阿里云服务器配置了安全组仍然无法访问宝塔控制面板/端口问题可以试试百度CDN在线地址直接引入使用哦:https://www.bootcdn.cn/JQ...
评:JS利用插件简单优雅的实现逼真的爱心/雪花飘落特效放在你引入插件snowfall.jquery.js插件后面执行
评:JS利用插件简单优雅的实现逼真的爱心/雪花飘落特效js不是引入的吗 那js的源码可以分享一下吗
评:JS利用插件简单优雅的实现逼真的爱心/雪花飘落特效$(document).snowfall({flakecount:100, maxSpeed...
评:JS利用插件简单优雅的实现逼真的爱心/雪花飘落特效
很受益
文章很不错
基础的js教程,可以