JS数组赋值的引用传递

在JS中,变量是值传递,而数组是引用传递。

举例如下:
//变量的赋值传递
var a = 2;    //变量
var b = a;
a = 3;
alert(b);    //结果b=2

//数组的赋值传递
var a = [1,2,3];    //数组
var b = a;
b [0] = 5;
alert(a);     //结果a=[5,2,3]

以上是比较常见的简单JS语法,但在面试时可能会遇到一些更加细腻并且容易出错的问题。

举例如下:

var a = [ 1 , 2 , 3 ]; //数组
var b = a;
a = [ 4 , 5 , 6 ]; //改变的是引用
alert(b);        //结果[1,2,3]
应该有很多同学会这样想:因为 数组是引用类型,应该是传递的是引用,所以 b也是[4,5,6],于是错了  。
正确答案是b=[1,2,3]。这是为什么吗?

首先强调一点概念:
数组名存放的内容是地址在C语言中数组名就是一个地址,指向数组的第一个元素
现在来详细的解读上面的程序:
var a= [1,2,3];    //定义一个数组并赋值,此时a 指向[1,2,3]数组对象
     

var b = a;          //因为a是数组名,表示的是地址。将a的地址付给b,此时b也指向[1,2,3]数组对象
          
a = [4,5,6];       //此时a指向数组对象[4,5,6],改变的是a的指向对象,并没有改变[1,2,3]数组对象本身
          

看到这里,之前有疑惑的同学应该豁然开朗了吧。,再补充一题让大家更充分的理解。

var a = [1,2,3];

var b = a;

a.pop();        //pop()方法 :删除数组对象的最后一个元素  这里是直接改变的数组对象[1,2,3]

alert(b);        //结果b=[1,2]



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值