var a = [1,2,3];var b = a;b.push(4);alert(b);这里输出的结果为什么是[1,2,3,4]呢?为什么会修改了原数组的值呢? var a = [1,2,3]; var b = a; b = [1,2,3,4]; alert(a); 这个题目和上面的有什么区别呢?
1 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
首先第一个问题,是js除开基本类型的引用传递,所以在
var a = [1,2,3]; //a存储的是一个内存地址x,该地址存放的内容是[1,2,3]
var b = a; //将a所指向的内存地址x赋值给b
b.push(4); //在内存地址x指向的数据中增加元素4
其过程是 x => [1,2,3] x => [1,2,3,4] "=>"表示指向内存
第二个问题和第一个问题的区别在于对于b的再次赋值
b = [1,2,3,4]; //清空原有内存地址x中存放的数据,重新赋值为[1,2,3,4]
这段代码的过程: x => [1,2,3] x => null x => [1,2,3,4]
在这个过程中,因为a b都是指向内存地址x,所以不管是a还是b重新赋值后,改变的都是该内存地址的数据,所以
a=x=>[1,2,3,4]
b=x=>[1,2,3,4]
添加回答
举报
0/150
提交
取消