a=[1,2,3]; b=a; a.push(4); b.push(5); a,b分别是多少()?

a=[1,2,3]; b=a; a.push(4); b.push(5); a,b分别是多少()? 为什么

阅读 5.4k
7 个回答

b=a;是引用关系,不是赋值关系。所以不仅值相等,内存地址也相等,相对于原型是同一个地址。
a.push(4);相对于在原型中添加了4,
b.push(5);相对于在原型中添加了5。
a和b都是[1,2,3,4,5]

b=a;这种写法是浅复制,实际上a和b指向同一个内存地址,所以a和b都是[1,2,3,4,5]

js数组和对象都是引用传递,也就是说当b=a的时候,b和a指向同一地址,所以其中一个的值改变了也就相当于改变了指向地址的值,这样所有指向该地址的都会随之改变,所以a和b最后都改变相同

a=[1,2,3,4,5];
b=[1,2,3,4,5];
a和b是数组,它们是引用类型,也就是其实 它们的赋值都是地址!

a = [1, 2, 3, 4, 5];
b = [1, 2, 3, 4, 5];
引用类型赋值,变量中保存的实际上只是一个指针,这个指针指向内存中的一个位置,该位置保存对象。
b = a后,ab变量的指针指向同一个位置,因此修改a或b会同时影响到两个变量的值

新手上路,请多包涵

引用类型的陷进,你可以理解为指针操作,两者其实指向同一个变量

a和b是全等的,你在执行b=a的时候是让a引用指向b引用所指向的对象,两个引用指向同一个对象,所以任何一个引用都可以修改这个对象,并且另一个引用也可以看到改变。

js等多数面向对象语言里对复杂类型进行等号赋值(=)称为浅拷贝

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