数组引用问题

2020-08-18  本文已影响0人  喵喵的记事本

var a=[1,2,3];

var b=a;

a=[4,5,6];

alert(b);//[1,2,3]

面试时被问到这样一个问题,竟然从来没试过... 当时直接的理解,数组是引用类型,应该是传递的是引用,所以b也是[4,5,6],于是错了。

那么,js数组传递是跟基本类型一样创建副本吗?

我又做了如下测试:

var a=[1,2,3];

var b=a;

a.pop();

alert(b);//[1,2]

这样好像又是引用传递了? 晕了

答案:

a = [4,5,6];//改变的是a引用本身,没有改变数组对象 

a.pop();//改变的是数组对象,a引用没有改变。 

b = a;//该操作后,b直接指向数组对象,不是b指向a,a再指向数组。所以改变a引用并不会对b引用造成影响,改变数组对象可以造成影响。

如图:

上一篇 下一篇

猜你喜欢

热点阅读