前天在写js时,遇到了一个很奇怪的问题:我有两个数组变量a、b,在经过一些运算后,数组b中有一些值,然后我就把数组b中的数据整体存入到数组a中(a.push(b)),然后就改变了数组b中的值(b.push(55), b.pop(), b[2]=100)。可是我最后从数组a中拿数据时,发现数组a中的数据竟然变了。我当时就纳闷了,我不是已经把数据存进去了么,为什么会变呢?而且如果把数组b清空后就不影响数组a中的值。 这样的情况,解决方案有3种: 以上的三种清空只能根据实际情况进行选择,而不是说哪个简单就选哪个。在我的项目中,就不能使用1和3,只能使用第二种情况。 js数组其实本质是object,我们使用数组a进行push时,只是push了这个数组b的引用(指针1),其他地方(指针2)改变这个数组b的值时,数组a通过这个指针1获取到的数据也相应的改变了,因为这两个指针访问的是同一个地方。那么解决这个问题的办法就是上面的三种,要么让指针1的指向失效,要么就借助一个局部变量。 凡事多想个为什么,多试验一下,就能让我们更明白这个问题。1. 遇到的问题 #
2. 解决方案 #
3. 内部原理 #
4. 总结 #
版权属于:
加速器之家
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论