js将数组赋给变量a,再把a赋给变量b,改变变量b,为什么a数组也变了?

var a=[1,2,3];
var b=a;
b.push(4);
alert(a);//结果为[1,2,3,4] 当b改变的时候a也发生了改变
请指教这是为什么啊

阅读 9k
6 个回答

因为在js中,对象和数组都是引用传递,所谓引用传递就是当变量b赋值为数组a后,ab便指向了同一个地址,这个地址的值便是[1, 2, 3]这个数组,所以当修改b,也就是修改了b指向地址的数组,而a也指向这个数组,所以a的值也会跟着变化

具体请参考:

a 把 [1,2,3] 装入箱子埋到地下,记录了位置坐标。

a 把位置告诉了 b

b 沿着坐标找到了箱子,打开放入 4

a 又回来打开箱子清点了一番,[1,2,3,4] 告知 alert

JavaScript (目前)有六大 primitive 类型,null、undefined、boolean、number、string、symbol,除此以外都是按照上面的方式传值,即传引用。

数组是引用类型,把a赋值给b,不是完全的开辟一个新地址保存一份数据,只是一个地址引用,都是指向一个地址。可以看一下js的值类型和引用类型,还有深拷贝和浅拷贝

新手上路,请多包涵

b = JSON.parse(JSON.stringify(a));

这样就可以解决了。

js 中 数组对象等都是引用类型,第一句将a指向了一个数组 第二句将a复制给了b 这里也是浅复制,将a的引用给了b a和b都指向了同一个数组,所以b指向的数组改变了 所以a也变了

数组,对象,函数都是引用类型

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题