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分别是多少()? 为什么
js数组和对象都是引用传递,也就是说当b=a的时候,b和a指向同一地址,所以其中一个的值改变了也就相当于改变了指向地址的值,这样所有指向该地址的都会随之改变,所以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等多数面向对象语言里对复杂类型进行等号赋值(=)称为浅拷贝。
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
b=a;是引用关系,不是赋值关系。所以不仅值相等,内存地址也相等,相对于原型是同一个地址。
a.push(4);相对于在原型中添加了4,
b.push(5);相对于在原型中添加了5。
a和b都是[1,2,3,4,5]